使用映射的配置文件连接到Web服务

时间:2016-02-16 09:00:24

标签: c# web-services wcf asynchronous configuration

我们有一个运行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)构造函数。但我宁愿不想编写自己的配置加载器逻辑。

有没有办法让构建客户端的代码知道加载的配置?如果没有其他选择?

1 个答案:

答案 0 :(得分:0)

您正在尝试阅读exe配置,但您正在使用Web上下文,我认为您必须使用OpenWebConfiguration

简而言之,此命令将Web应用程序配置文件作为Configuration对象打开。

或者,您可以将配置添加到CRM网站上的 web.config

请参阅this Stackoverflow article

请参阅MSDN