我已经在VS2008/中添加了web服务的代理。NET 3.5解决方案。在构造客户端。net时会抛出以下错误:
在ServiceModel客户端配置部分中找不到引用合约“IMySOAPWebService”的默认端点元素。这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中没有找到与此契约匹配的端点元素。
搜索此错误告诉我在契约中使用完整的名称空间。这是我的app.config完整的命名空间:
<client>
<endpoint address="http://192.168.100.87:7001/soap/IMySOAPWebService"
binding="basicHttpBinding" bindingConfiguration="IMySOAPWebServicebinding"
contract="Fusion.DataExchange.Workflows.IMySOAPWebService" name="IMySOAPWebServicePort" />
</client>
我正在运行XP本地(我提到这是因为一些谷歌点击提到win2k3)
将app.config复制到app.exe。配置,所以这也不是问题。
有线索吗?
我通过自己创建绑定和端点地址实例解决了这个问题(我认为其他人可能已经建议了)——因为我不想向配置文件添加新的设置(这是对一些广泛使用的现有库代码的替换,以前使用的是旧的Web Service Reference等),所以我希望能够在不添加新的配置设置的情况下将其放入。
var remoteAddress = new System.ServiceModel.EndpointAddress(_webServiceUrl);
using (var productService = new ProductClient(new System.ServiceModel.BasicHttpBinding(), remoteAddress))
{
//set timeout
productService.Endpoint.Binding.SendTimeout = new TimeSpan(0,0,0,_webServiceTimeout);
//call web service method
productResponse = productService.GetProducts();
}
Edit
如果你正在使用https,那么你需要使用BasicHttpBinding而不是BasicHttpBinding。
请允许我再补充一点。(Tom Haigh的回答已经暗示了这一点,但我想明确一点)
我的网络。配置文件定义如下:
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
我已经使用basicHttpBinding作为一个引用,但随后我添加了一个需要basicHttpBinding的新引用。我所要做的就是将其添加到我的protocolMapping中,如下所示:
<protocolMapping>
<add binding="basicHttpBinding" scheme="http" />
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
正如L.R.所正确指出的,这需要在正确的地方进行定义。对我来说,这意味着在我的单元测试项目的app.config和主服务项目的web.config中都有一个。