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

本文档详细介绍了如何使用C#调用Java WebService,并在调用过程中实现身份验证。服务端包括接口定义、实现及配置,客户端通过引用服务地址生成代理类并重写GetWebRequest方法,设置用户名和密码进行授权。正确设置后,能够成功调用服务并接收到响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

	@Override
	public 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或者设置错误,则调用时服务端方法会提示错误:

设置正确提示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值