我在使用c#应用程序设置Microsoft Translator SOAP Service时遇到问题,而不依赖于其生成的app.config文件。
app.config文件包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_LanguageService" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://api.microsofttranslator.com/V2/soap.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_LanguageService"
contract="Soap.LanguageService" name="BasicHttpBinding_LanguageService" />
</client>
</system.serviceModel>
</configuration>
在参考此Stack answer时,我使用了以下方法:
internal static Soap.LanguageServiceClient CreateWebServiceInstance()
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.Name = "BasicHttpBinding_LanguageService";
binding.TextEncoding = System.Text.Encoding.UTF8;
return new Soap.LanguageServiceClient(binding, new EndpointAddress("http://api.microsofttranslator.com/V2/soap.svc"));
}
但是,即使我在执行翻译服务之前调用CreateWebServiceInstance()
,我也会得到这个未处理的异常:
Could not find default endpoint element that references contract 'Soap.LanguageService' in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.
我不熟悉BasicHttpBinding
,所以我不知道从哪里开始...
答案 0 :(得分:8)
首先提出几个问题。 当我读到它时,你正在尝试使用服务。 该服务暴露了其WDSL。 现在您是否尝试使用它而不使用SVCUtil生成的代理类(例如)/ VisualStudioAddServiceReference?或者您只是尝试在代码中配置绑定,而不是在app.config?
中如果您尝试使用该服务而不生成上面指定的代理类,则需要使用动态代理生成。 ()。
否则,如果您生成了代理类,那么您应该实际使用app.config配置绑定,因为它更方便。 (例如,考虑到进入生产时端点地址的变化。) 如果你真的不想使用app.config绑定。然后在你现在这样做的方式我怀疑你忘记了你想要用于绑定的合同。
参见服务的ABC :()
Address
Binding
Contract
你已经有了前两个,我没看到最后一个。
修改强>
深入研究您的问题后。并且还注意到这是一个公共服务器。 我能够创建绑定以及与服务进行通信。 (除非我得到一个非授权的例外,这是正常的,因为我没有令牌。
连接服务: 在visual studio中添加服务的服务引用。
第二步删除将由上面生成的app.config文件。 第三步在某处添加以下代码。
var binding = new BasicHttpBinding();
var client = new LanguageServiceClient(binding, new EndpointAddress("http://api.microsofttranslator.com/V2/soap.svc"));
步骤4:使用客户端调用方法。 在该方法中,您必须添加在注册服务时收到的“AppId”。 通常从这一点上你不应再遇到任何问题了。
让我知道你是否会遇到它们。
答案 1 :(得分:1)
我能够让它工作......我正在调用SOAP实例两次,从而覆盖了对象。