C#调用java-ws(带身份验证功能)

来源:互联网 发布:永宏触摸屏软件 编辑:程序博客网 时间:2024/05/22 13:44

java服务端:

服务接口:

@WebService@SOAPBinding(style = Style.RPC)public interface HelloWorld{@WebMethod String getHelloWorldAsString();}


服务实现:

@WebService(endpointInterface = "com.mkyong.ws.HelloWorld")public class HelloWorldImpl implements HelloWorld{@Resource    WebServiceContext wsctx;@Overridepublic String getHelloWorldAsString() {MessageContext mctx = wsctx.getMessageContext();        //提取http header中的属性做权限判断         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 with database        if (username.equals("mkyong") && password.equals("password")){        return "Hello World JAX-WS - Valid User!";        }else{        return "Unknown User!";        }}}

服务配置

/WebContent/WEB-INF/sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
  xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
  version="2.0">
  <endpoint
      name="HelloWorld"
      implementation="com.mkyong.ws.HelloWorldImpl"
      url-pattern="/hello"/>
</endpoints>

 

/WebContent/WEB-INF/web.xml

<web-app>    <listener>        <listener-class>         com.sun.xml.ws.transport.http.servlet.WSServletContextListener        </listener-class>    </listener>    <servlet>        <servlet-name>hello</servlet-name>        <servlet-class>         com.sun.xml.ws.transport.http.servlet.WSServlet        </servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>hello</servlet-name>        <url-pattern>/hello</url-pattern>    </servlet-mapping></web-app>

C#客户端

引用部署在tomcat中java web服务的地址(http://localhsot:8080/WebServices/hello?wsdl)生成代理类,在生成的代理类中重载GetWebRequest方法:

        protected override System.Net.WebRequest GetWebRequest(Uri uri) {            System.Net.WebRequest request = base.GetWebRequest(uri);            request.Headers.Add("Username", "mkyong");            request.Headers.Add("Password", "password");            return request;        }


在客户端中调用:

            localhost.HelloWorldImplService service = new TestCA.localhost.HelloWorldImplService();            MessageBox.Show(service.getHelloWorldAsString());


如果没有设置username和password或者设置错误,则调用时服务端方法会提示错误:

设置正确提示:

原创粉丝点击