我们有一个运行async的CRM2011插件,需要连接到Web服务才能获得一些丢失的数据。我尝试解决这个问题的方法是使用网络服务客户端,使用'添加服务参考'。
但是对于配置,我不想对端点和绑定进行硬编码。所以我想我只会使用OpenMappedExeConfiguration
加载web服务的配置。
var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap{ ExeConfigFilename = @"c:\Path\to\config.xml"}, ConfigurationUserLevel.None);
配置文件已加载...但客户端无法看到它。因为打电话
var client = new MyDataServiceClient();
将抛出
InvalidOperationException:
找不到引用合同的默认端点元素 ' MyDataService.IMyDataService'在ServiceModel客户端中 配置部分。这可能是因为没有配置文件 是为您的应用程序找到的,或者因为没有端点元素 匹配此合同可以在客户端元素中找到。
我使用的配置文件是:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IMyDataService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="Ntlm" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint
address="https://integrationservices-dev.thecompany.com/MyDataService/MyDataService.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IMyDataService"
contract="MyDataService.IMyDataService"
name="BasicHttpBinding_IMyDataService" />
</client>
</system.serviceModel>
</configuration>
我知道我可以初始化一个绑定和端点并将它们提供给MyDataServiceClient(Binding, Endpoint)
构造函数。但我宁愿不想编写自己的配置加载器逻辑。
有没有办法让构建客户端的代码知道加载的配置?如果没有其他选择?
答案 0 :(得分:0)
您正在尝试阅读exe配置,但您正在使用Web上下文,我认为您必须使用OpenWebConfiguration
。
简而言之,此命令将Web应用程序配置文件作为Configuration对象打开。
或者,您可以将配置添加到CRM网站上的 web.config
请参阅MSDN