Java soap вызов аутентификации заголовка веб-службы из windows приложения c# - PullRequest
0 голосов
/ 08 мая 2020

Я создал веб-службу soap по адресу java. При вызове с java работает нормально, но при вызове с c# он не работает, не могли бы вы мне помочь? Как вызвать метод getHelloWorldAsString из c# с аутентификацией заголовка. Заранее спасибо

Вот код java:

package com.mkyong.ws;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

//Service Implementation Bean
@WebService(endpointInterface = "com.mkyong.ws.HelloWorld")
public class HelloWorldImpl implements HelloWorld{

    @Resource
    WebServiceContext wsctx;

    @Override
    public String getHelloWorldAsString() {

        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();
        }

        //Should validate username and password
        if (username.equals("abcd") && password.equals("abcd123")){
            return "Hello World JAX-WS - Valid User!";
        }else{
            return "Unknown User!";
        }

    }

    @Override
    public String getSum() {
            return "10";
    }
}

Вот звонок java (это работает): package com.mkyong.client;

import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Service;
import javax.xml.ws.handler.MessageContext;

import com.mkyong.ws.HelloWorld;

public class HelloWorldClient{

    private static final String WS_URL ="http://localhost:8080/ws/HelloWorld?wsdl";

    public static void main(String[] args) throws Exception {

        try {
            URL url = new URL(WS_URL);
            QName qname = new QName("http://ws.mkyong.com/", "HelloWorldImplService");

            Service service = Service.create(url, qname);
            HelloWorld hello = service.getPort(HelloWorld.class);

            /*******************UserName & Password ******************************/
            Map<String, Object> req_ctx = ((BindingProvider)hello).getRequestContext();
            req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);

            Map<String, List<String>> headers = new HashMap<String, List<String>>();
            headers.put("Username", Collections.singletonList("abcd"));
            headers.put("Password", Collections.singletonList("abcd123"));
            req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
            /**********************************************************************/

            System.out.println(hello.getHelloWorldAsString());
            System.out.println(hello.getSum());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

C# Вызов клиента: после добавления wsdl в веб-службу приложения windows записывается следующий код C#,

webService.HelloWorldImplService ws = new webService.HelloWorldImplService (); Console.WriteLine (ws.getHelloWorldAsString ());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...