Можно ли вызвать веб-службу java из клиента c# (restclient)

Я пытаюсь вызвать веб-сервис с помощью клиента C#. Текущий код на C# - создать RestClient и отправить запрос.

string url = "http://test:8080/";
var client = new RestClient(url);
var req = new RestRequest("test/", Method.POST);
req.AddParameter("", data, ParameterType.RequestBody);


//Add authentication to request

//execute client request
IRestResponse testresponse = client.Execute(req);

Ниже приведен код веб-службы.

    @WebService(endpointInterface = "com.test.ws.test")
    public class TestServiceImpl implements TestService
    {
    private TestUpdater TestUpdater;

    private Posting1Status postingStatus;

    @Override
    public Posting1Status setTestentry(Testentry entry) 
    {
        MessageContext mctx = wsctx.getMessageContext();
        //get detail from request headers
        Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
        List userList = (List) http_headers.get("Username");
        List passList = (List) http_headers.get("Password");

        String username = "";
        String password = "";

        if(userList!=null){
              //get username
              username = userList.get(0).toString();
        }

        if(passList!=null){
              //get password
              password = passList.get(0).toString();
        }     

        if (username.equals("roji") && password.equals("roji1"))
        {
        }
    }

Перед добавлением этого кода аутентификации клиент C# смог получить доступ к веб-сервису и запустить код, как ожидалось. Но я не могу найти заголовки или неправильно их передаю. Может быть, у кого-нибудь есть какие-то решения, или если я делаю это правильно.

Так вы посмотрели на точный запрос, который делает код C#? (И нужно ли иметь имя пользователя / пароль в виде открытого текста? Это определенно не идеально в качестве схемы аутентификации.)

Jon Skeet 10.08.2018 16:06

Кажется, вы не добавляете заголовки к RestRequest на C#. Вы это пропустили?

Dan Wilson 10.08.2018 16:09

@daisy Я просто пытаюсь пройти базовую аутентификацию в данный момент, после чего я могу улучшить пароли и сделать их более безопасными.

A12 10.08.2018 16:20

@Dan Я пробовал следующие заголовки, но они тоже не работали req.AddHeader ("Username", "roji"); req.AddHeader («Пароль», «roji1»);

A12 10.08.2018 16:21

Вместо того, чтобы пытаться реализовать аутентификацию самостоятельно, я настоятельно рекомендую вам изучить модули аутентификации, предоставляемые используемой вами структурой. Они, вероятно, обеспечат гораздо более эффективную безопасность. и Вероятно, вы также сможете легче взаимодействовать с C#.

Jon Skeet 10.08.2018 16:25
0
5
115
1

Ответы 1

вы можете реализовать этот базовый класс i, который вы узнаете, как добавить столько пар ключ-значение, сколько вам нужно, в заголовок

public static class RestserviceClient
{
    static string URL_ENDPOINT = "www.endpoint.com/service/method";

    public static dynamic CallService(string jsonToSend)
    {

        var url = new Uri(URL_ENDPOINT);
        var connection = (HttpWebRequest)WebRequest.Create(url);

        //Timeout, proxy and other configurations
        connection.Timeout = 120000;
        connection.Proxy = WebRequest.DefaultWebProxy;
        connection.KeepAlive = true;
        connection.ContentType = string.Format("application/json");

        //Restful call in this case POST
        connection.Method = "POST";
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

        //IMPORTANT --> Add as much key-value headers you need
        connection.Headers.Add("firstHeaderKey", "firstHeader Value");
        connection.Headers.Add("secondHeaderKey", "secondHeader Value");

        using (var outStream = connection.GetRequestStream())
        {
            var docStream = new StreamWriter(outStream);
            outStream.AppendJson(jsonToSend);
            docStream.Flush();
            docStream.Close();
        }

        string retVal;
        var res = connection.GetResponse();
        using (var resStream = res.GetResponseStream())
        {
            if (resStream == null) return null;
            var reader = new StreamReader(resStream);
            retVal = reader.ReadToEnd();
        }
        return retVal;
    }

    public static void AppendJson(this Stream dos, String json)
    {
        var bld = new StringBuilder();
        bld.Append(json);
        var a = Encoding.UTF8.GetBytes(bld.ToString());
        dos.Write(a, 0, a.Length);
    }
}

Другие вопросы по теме