1

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

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

  1. 我可以将 WCF 配置从 ControlsProject 复制到 MainProject(我不相信我可以按照“如何在另一个项目中包含 Web 引用端点配置”)
  2. 在 ControlsProject 配置中,合同没有完全限定的命名空间,而是有一个名称,例如“ ServiceName.IServiceInterfaceName”。合同名称应该是什么,因为 ControlsProject 输出将是位于 MainProject 的 bin 文件夹中的文件?

我试过只是复制配置,但收到异常:“ 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.

感谢您提供的任何帮助!

更新 (美国东部标准时间 2011 年 7 月 14 日下午 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>
4

1 回答 1

0

每当您看到“无法找到某某合同的默认端点元素”时,您的实际合同(接口)就没有在 app.config 文件中正确引用。转到控件项目中的接口合同,仔细检查它所在的命名空间,您需要确切的命名空间。“接口名称”作为 app.config 中的合同元素。您还需要确保您的 service name=Namespace.MyService 是正确的命名空间和类。一种知道您是否正确的简短方法(仅当您有 resharper 时),在您声明服务名称 = 的 appconfig 中,将光标放在服务名称和命名空间上,然后按 F12,如果它没有带您到任何地方您正在引用一个不存在的命名空间和类,如果您在该合同上按 F12 并且它不存在,则合同 = 也是如此

于 2011-07-14T15:40:37.113 回答