另一个项目中端点的WCF配置

时间:2011-07-14 14:35:52

标签: wcf wcf-binding wcf-configuration wcf-endpoint

我在一个解决方案中有两个项目。一个项目,我们称之为MainProject,成为可执行文件。另一个项目,我们称之为ControlsProject,包含UserControl,并在MainProject中引用(和使用)。 ControlsProject还有一个WCF服务参考。

关于此配置,我有两个问题:

  1. 我可以将WCF配置从ControlsProject复制到MainProject(我不相信我可以“How to include Web reference endpoint configuration in another project”)
  2. 在ControlsProject配置中,合同没有完全限定的命名空间,而是具有诸如“ServiceName.IServiceInterfaceName”之类的名称。合同名称应该是什么,因为ControlsProject输出将是位于MainProject的bin文件夹中的文件?
  3. 我尝试过复制配置,但收到异常:“Could not find default endpoint element that references contract 'MyService.IMyService' 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.”当我复制配置时,我将接口名称完全限定为ControlsProject.MyService.IMyService

    非常感谢您提供的任何帮助!

    更新 (美国东部时间7/14/2011 5:28)

    以下是我的客户端app.config的代码段:

    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IStatService" 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="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://intranet/StatService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IStatService"
                contract="StatService.IStatService" name="BasicHttpBinding_IStatService" />
        </client>
    </system.serviceModel>
    

    以下是我的网络服务web.config中的代码段:

    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="true" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    

1 个答案:

答案 0 :(得分:0)

如果您看到“无法找到此类合同的默认端点元素”,那么您在app.config文件中未正确引用您的实际合同(接口)。转到控件项目中的接口契约,仔细检查它所在的命名空间,你需要那个确切的命名空间。“接口名称”作为app.config中的contract元素。您还需要确保您的服务名称= Namespace.MyService是正确的命名空间和类。一个简短的方法来了解你是否正确(这只有你有resharper),在你声明服务名称的appconfig中=将光标放在服务名称和命名空间上并点击F12,如果它不带你到任何地方你引用了一个不存在的命名空间和类,对于契约来说也是如此=,如果你在那个契约中使用F12而它没有带你到那里,它就没有被正确引用(可能拼写错误)。