【问题标题】:How to invoke Axis webservice through a .NET client如何通过 .NET 客户端调用 Axis Web 服务
【发布时间】:2012-02-14 19:21:00
【问题描述】:

我的任务是调用和连接到 dotnet Web 应用程序中的 Axis Web 服务。

webservice,首先需要用户名和密码的认证,应该在header中发送,只有认证后,我们才能调用它的任何方法。

现在,我不知道如何传递凭据和调用网络服务。

我有显示如何访问 web 服务的 Java 代码,但我不知道如何在 .NET 中执行相同操作。

我想我必须使用 WSE 3.0。

这是Java代码:

Service  webService = new Service();
Call  calling    = (Call) webService.createCall();
calling.setProperty (Call.USERNAME_PROPERTY, "victor");
calling.setProperty (Call.PASSWORD_PROPERTY, "victor_s");
String userid="userid";
String password="password";
String endpoint= "SERVICEURL";

Service  service = new Service();
Call     call    = (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName(new QName(endpoint,methodName));
call.setProperty (Call.USERNAME_PROPERTY, "victor");
call.setProperty (Call.PASSWORD_PROPERTY, "victor_s");


String ItineraryDetailsInputXML="<?xml version=\"1.0\" encoding=\"UTF-8\"?><ItineraryDetailsInput lccp_srcstn=\"NDLS\" lccp_dstnstn=\"MAS\" lccp_trnnum=\"2616\" lccp_cls=\"SL\" lccp_resupto=\"MAS\" lccp_brdpt=\"NDLS\" lccp_day=\"27\" lccp_month=\"11\" lccp_year=\"2008\" lccp_qta=\"GN\" lccp_psgnname1=\"SANJEEV KUMAR \" lccp_psgnsex1=\"m\" lccp_psgnage1=\"60\" lccp_psgnberthpref1=\"Side_Upper\" lccp_psgnfoodpref1=\"Veg\" lccp_psgnconc1=\"SRCTZN\" lccp_psgnname2=\"Prasad\" lccp_psgnsex2=\"f\" lccp_psgnage2=\"60\" lccp_psgnberthpref2=\"Side_Lower\" lccp_psgnfoodpref2=\"\" lccp_psgnconc2=\"SRCTNW\" lccp_psgnname3=\"saa\" lccp_psgnsex3=\"m\" lccp_psgnage3=\"05\" lccp_psgnberthpref3=\"\" lccp_psgnfoodpref3=\"\" lccp_psgnconc3=\"\" lccp_psgnname4=\"ssss\" lccp_psgnsex4=\"m\" lccp_psgnage4=\"45\" lccp_psgnberthpref4=\"\" lccp_psgnfoodpref4=\"\" lccp_psgnconc4=\"\" lccp_psgnname5=\"\" lccp_psgnsex5=\"\" lccp_psgnage5=\"\" lccp_psgnberthpref5=\"\" lccp_psgnfoodpref5=\"\" lccp_psgnconc5=\"\" lccp_psgnname6=\"\" lccp_psgnsex6=\"\" lccp_psgnage6=\"\" lccp_psgnberthpref6=\"\" lccp_psgnfoodpref6=\"\" lccp_psgnconc6=\"\" userid=\""+userid+"\" password=\""+password+"\"/>";
StringBuffer buffer = new StringBuffer ();

String requestXml=ItineraryDetailsInputXML;

我不知道如何使用 .NET 完成所有这些凭据传递。 因此,我请求您指导我,我应该如何解决这个问题。 另外,如果可以的话,请给我一些.NET中的示例代码,上面的场景可以在哪里 完成。

【问题讨论】:

    标签: .net web-services axis


    【解决方案1】:

    如果没有 WSDL,我也不知道,但我认为您没有理由使用 WSE 之类的过时代码。为什么你认为你必须这样做?

    另外,您使用的是哪个版本的 .NET?你试过什么?

    是您不知道如何从.NET 调用Axis 服务,还是您不知道如何从.NET 调用任何 服务?

    【讨论】:

    • 嗨,约翰,谢谢您的 4 回复。实际上,我必须调用一个轴 webservive,它需要首先使用用户名、密码调用(参见上面的 java 代码)。现在我在网上搜索如何将凭据传递给轴网络服务,所以我最终使用了 wse 3.0(因为它有 UserNameTokens)。我正在使用 VS2005 ,但如果需要也可以使用 VS2008 。另外,我主要是一个 Sharepoint 人,所以我主要使用 dotnet webservice ,它使用网络凭据。测试 webservice 的 Url 是:202.93.154.18/webservices1.7/service 见上面的 java 代码,我如何在 dotnet 中做到这一点
    • 我无法访问该服务。它超时。但是,这里有一个非常重要的提示。如果你看到“WSE”这个词,你应该假装它是“PLAGUE”。它已经过时,没有被开发,并且几乎没有得到支持。我真的不明白为什么 MS 不只是告诉你。但由于我不为他们工作,可以告诉你——不要这样做。请改用 WCF。 WCF 是 WSE、ASMX Web 服务等的替代品。
    • 嗨,约翰,谢谢 4 位您的回复.. 是的,通过 WSE 上的文档 .. 它确实是一个 PLAGUE,但我没有任何其他方式.. 此外,网络服务需要调用服务的对象,应该有适当的凭据,我们可以在 WCF 中做吗?因为 服务 本身 没有 任何 auhenticatin 方法 , 只是 调用 它 的 对象 应该 有 credentails .
    • 正如我所说,WCF 具有 WSE 和 ASMX 以及 Remoting 的所有功能,等等。 WSE 在很大程度上是一种临时技术,现已被取代。你最好假装它从未存在过。您找到了一个完美的例子来说明为什么使用 Google 会出现问题 - 您发现的文章没有标记“WSE 已过时,所以不要使用它”,因为在撰写时,WSE 并没有过时。
    【解决方案2】:

    在 Visual Studio 中解析 WSDL。转到顶部菜单中的“项目”菜单 -> 根据您拥有的 VS 版本选择“添加 Web 引用”或“添加服务引用”。

    然后您只需在代码中创建一个新客户端。客户端将有类似“客户端凭据”的内容,您可以在其中将用户名/密码传递给它:

    WebServiceClient client = new WebServiceClient();
    client.ClientCredentials.UserName.UserName = "xyz";
    client.ClientCredentials.UserName.Password = "123";
    

    顺便说一句,您连接到 AXYS Web 服务并不重要。 Web 服务的全部意义在于能够使用标准,这样客户端就无关紧要了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2011-04-25
      • 1970-01-01
      相关资源
      最近更新 更多