无法添加服务引用

7

我正在尝试调用一个SOAP Web服务:

http://api.affiliatewindow.com/v4/AffiliateService?wsdl

然而,通过使用标准的Web服务对话框添加服务引用后,生成的类中没有任何操作可用-它是空的:

Empty sadness

我尝试了在“添加引用”对话框上更改各种组合的选项。

是否有另一种方式来添加此类型的引用?(注意:为了实际调用操作,服务需要一个用户名/密码头-也许我需要在生成类时包含它?如果是这样-如何操作?)


1
我在想问题是否出在网络服务提供商身上?当我访问我构建的 Web 服务的 WSDL 时,XML 弹出在浏览器中。但是当我访问你在问题中发布的 URL 时,浏览器不知道该怎么处理它,并询问我是否要打开文件或下载它。当我选择打开时,它会询问我想使用哪个应用程序。 - Duston
1
从您的URL头中: "Content-Type: application/wsdl+xml" 从我的URL头中: "Content-Type: text/xml" - Duston
根本问题在于AffiliateWindow的WSDL不符合WS-I基本配置文件,这就是为什么VS会出现问题的原因。 "添加服务引用"和"添加Web引用"对话框 - 以及相应的svcutilwsdl命令行工具 - 以稍微不同的方式容忍怪癖。在这种情况下,看起来wsdl.exe可以处理它,如下面Black Frog的答案所述。 - LukeH
2个回答

7
我使用Web Services Description Language Utility (Wsdl.exe)手动生成代理类。
wsdl http://api.affiliatewindow.com/v4/AffiliateService?wsdl /namespace:AffiliateWindow
我喜欢使用命名空间选项,这样就不会与我当前的解决方案中的任何对象发生冲突。

wsdl command line

然后我可以将生成的代码文件添加到您的解决方案中。我已经附上了解决方案中对象浏览器的截图:

object browser

现在,您可以按照您的意愿实例化该服务:
// I don't know anything about Affiliate Window - but I am assuming you would use it
// like the following code below

AffiliateWindow.UserAuthentication auth = new AffiliateWindow.UserAuthentication();
auth.sType = AffiliateWindow.UserType.affiliate;
auth.sPassword = "123456";

AffiliateWindow.ApiService svc = new AffiliateWindow.ApiService();
svc.UserAuthenticationValue = auth;

1
这个很好用。你是我的英雄。确保你用赏金买些有趣的东西。 - Dave Bish

0

我发现一些SOAP参考资料(如SalesForce)必须作为Web引用而不是常规服务引用添加。

当您右键单击“引用”,选择“添加服务引用”,然后单击底部的“高级”按钮,再单击底部的“添加Web引用...”按钮时。
如果输入有效的端点URL,则应在对话框右侧的列表中显示可用于引用的Web服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接