我们希望我们的Web应用程序与我们的WCF Web服务分离。我们不希望网络应用程序知道它是否触及任何WCF服务。因此我们不希望在Web应用程序集中定义任何WCF Web服务引用。ASP.NET MVC WCF服务引用/代理是否必须存在于Web应用程序集合中?
我想要做的是创建一个单独的WCF包装程序集,其中将包含WCF服务参考和app.config
文件中的必要配置。 WCF包装中的方法将从Web应用程序调用。当我在Web App程序集中创建WCF服务引用和配置时,它工作正常。当我将WCF Web引用和配置文件放入WCF包装程序集时,它抱怨找不到端点。它看起来不像是在包装程序集中找到app.config
文件。
因此,在总结我想要的结构如下:
Web app --> WCF wrapper (with WCF service references and config) --> BAL layer --> etc
配置文件(Web.config如果Web应用程序组件的app.config如果WCF包装程序集):
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IEmailValidator" 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://localhost:8080/" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IEmailValidator" contract="EmailProxy.IEmailValidator"
name="BasicHttpBinding_IEmailValidator" />
</client>
</system.serviceModel>
我是否必须在Web应用程序组合中创建WCF服务引用,还是可以在WCF包装中执行?
错误消息:
找不到默认终结点元素引用合同 'EmailProxy.IEmailValidator' 在ServiceModel客户端配置 部分。这可能是因为没有为您的应用程序找到配置文件 ,或者因为在客户端元素中找不到与此 合同匹配的端点元素。
谢谢。这可能是一个愚蠢的问题,WCF代理服务引用是否也必须在主机应用程序中创建? – Elim99
@ Elim99:“主机应用程序”是什么意思? WCF始终是两部分 - **服务器**(实现服务方法并托管在例如IIS或Windows服务中)以及一个或多个**客户端**,它们使用客户端代理与服务器。因此,只有客户端需要客户端代理,显然... –
我的意思是我有一个宿主应用程序程序集,在另一个程序集中调用WCF包装类,然后调用服务方法。我的问题是:代理是否只存在于WCF包装程序集中?目前,我必须在两个程序集中都设置代理,即使“主机应用程序程序集”不直接调用服务方法。 – Elim99