我在一个解决方案中有两个项目。一个项目,我们称之为MainProject,变成了一个可执行文件。另一个项目,我们称之为ControlsProject,包含UserControl
,并在主项目中被引用(和使用)。ControlsProject也有一个WCF服务引用。
关于这个配置我有两个问题:
- 我可以将WCF配置从ControlsProject复制到MainProject(我不相信我可以按照"如何在另一个项目中包含Web引用端点配置")
- 在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
。
你能提供的任何帮助都是感激的!
(7/14/2011 5:28pm)
下面是我的客户端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服务web.config的代码片段:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
当你看到"Could not find default endpoint element for such and such contract"时,说明你的实际合约(接口)在app.config文件中没有被正确引用。去控制项目中的接口契约,仔细检查它所在的命名空间,你需要确切的命名空间。"接口名称"作为app.config中的契约元素。您还需要确保您的服务名称=Namespace。MyService是正确的名称空间和类。一个简单的方法来知道你是否正确(这是只有当你有resharper),在appconfig中,你声明服务名称=把光标放在服务名称和名称空间上,然后按F12,如果它没有带你到任何地方,你引用一个不存在的名称空间和类,同样的合同=,如果你在合同上按F12,它没有带你到那里,它没有被正确引用(可能拼写错误)。