是的,如果希望Silverlight与外部源进行通信,则需要clientaccesspolicy.xml。
您没有指定WCF服务是作为服务托管、自托管还是在IIS中托管。如果该文件位于IIS中,则该文件将放置在共享文件夹(网站)的根目录中。
如果服务是自托管的,那么您可以阅读此
article
.
对于Windows服务,您可以参考以下内容
article
但是如果你只是偶尔得到错误,那么这可能不是你最大的问题。考虑到您说在尝试发送大参数时会发生错误的事实,这意味着您必须查看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>
编辑
:
下面是如何在服务器端添加绑定。
-
右键单击web.config并说“编辑WCF配置”
-
在右侧,有一个树元素“bindings”
-
右键单击并说“添加新绑定”
-
命名绑定并将所有max*元素设置为任意大的数字。
-
通过扩展服务并选择正在使用的端点,将此绑定与端点关联。在绑定配置中,选择新绑定。
您还可以通过查找元素手动将其添加到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以及最初如何添加服务端点的详细信息。