是的,当您希望 Silverlight 与外部源通信时,您需要 clientaccesspolicy.xml。
您没有指定 WCF 服务是作为服务托管、自托管还是在 IIS 中托管。如果在 IIS 中,则该文件将放置在共享文件夹(网站)的根目录中。
如果该服务是自托管的,那么您可以阅读此内容article http://www.developerfusion.com/community/blog-entry/8392371/consuming-a-selfhosted-wcf-service-in-silverlight/.
对于Windows服务,可以参考以下内容article http://silverlight.net/forums/p/16839/57457.aspx#57457
但如果您只是偶尔遇到错误,那么这可能不是您最大的问题。事实上,您说当您尝试发送大参数时会发生错误,这意味着您必须查看 WCF 服务和客户端的绑定。这些限制通常约为每次调用 16kb。这可以在服务端完成,通过创建允许传递大量数据的绑定。
<basicHttpBinding>
<binding name="NewBinding0" maxBufferSize="104857600" maxReceivedMessageSize="104857600">
<readerQuotas maxDepth="104857600" maxStringContentLength="104857600"
maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600" />
</binding>
</basicHttpBinding>
然后将其关联到端点。
如果您查看客户端的 ServiceReferences.ClienConfig 文件,您应该会看到与 WCF 服务的绑定。
您可以将其编辑为如下所示:
<binding name="ProductConfig" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
EDIT:
以下是如何在服务器端添加绑定。
- 右键单击 web.config 并说“编辑 WCF 配置”
- 右侧有一个树元素“Bindings”
- 右键单击它并说“添加新绑定”
- 为绑定命名并将所有 Max* 元素设置为任意大的数字。
- 通过扩展您的服务并选择您正在使用的端点,将此绑定关联到您的端点。在 BindingConfiguration 中,选择新的绑定。
您还可以通过查找元素手动将其添加到 web.config 文件中
<system.serviceModel>
应该有一个<bindings>
那里的某个地方的子元素。
您可以在其中添加如上所示的绑定。然后向下滚动到显示端点的位置,并在 xml 中添加一个 bindingConfiguration="NewBinding0" 标记。
编辑拍摄2:
好的,当然,这是我的一个项目中的示例:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<extensions>
</extensions>
<bindings>
<basicHttpBinding>
<binding name="NewBinding0" maxBufferSize="104857600" maxReceivedMessageSize="104857600">
<readerQuotas maxDepth="104857600" maxStringContentLength="104857600"
maxArrayLength="104857600" maxBytesPerRead="104857600" maxNameTableCharCount="104857600" />
</binding>
</basicHttpBinding>
<mexHttpBinding>
<binding name="NewBinding1" />
</mexHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="policyBehavior">
<webHttp />
</behavior>
<behavior name="NewBehavior" />
</endpointBehaviors>
<serviceBehaviors>
<behavior name="NewBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="NewBehavior" name="ALMWCFHost.ServiceModel">
<clear />
<endpoint address="GuildService" binding="basicHttpBinding" bindingConfiguration="NewBinding0"
name="ProductConfig" contract="ALMWCFHost.IProductConfigModel"/>
<host>
<baseAddresses>
<add baseAddress="http://omrsrv004/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
如果您遇到更多问题,请提供有关您正在使用的 IDE 以及最初如何添加服务端点的详细信息。