(转)在WCF服务的ServiceReferences.ClientConfig中使用相对路径
問題:
?????? Silverlight項目中添加服務引用后會在Silverlight項目中生成一個ServiceReferences.ClientConfig文件,這個文件中包含了引用服務的綁定(bindings)和終結點(Endpoint)的配置信息。下面是引用一個WCF服務后自動生成的配置信息:
<configuration>
??? <system.serviceModel>
??????? <bindings>
??????????? <basicHttpBinding>
??????????????? <binding name="BasicHttpBinding_IService1" maxBufferSize="2147483647"
??????????????????? maxReceivedMessageSize="2147483647">
??????????????????? <security mode="None" />
??????????????? </binding>
??????????? </basicHttpBinding>
??????? </bindings>
??????? <client>
??????????? <endpoint address="http://localhost:4177/Services/Service1.svc"
??????????????? binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1"
??????????????? contract="ServiceReference1.IService1" name="BasicHttpBinding_IService1" />
??????? </client>
??? </system.serviceModel>
</configuration>
在程序開發階段,使用上面的配置信息不會有什么錯誤。在部署程序時,服務的地址通常和開發時使用的服務地址是不一樣的,這時就需要修改上面的配置信息中的終結點的地址。但是Silverlight項目編譯后會將ServiceReferences.ClientConfig嵌入到生成的xap文件中,這給修改帶來了一定難度。
以上問題的描述參考自http://www.aspxcs.net/HTML/2345222075.html。
當然,你也可以用zip解壓縮,修改ServiceReferences.ClientConfig后再放回去,但每次都這么處理對軟件的產品化發布很不利。
解決辦法:
?????? 看了http://zdd.me/managingendpoint發布的解決辦法,我的項目是跟WCF在同一個站點中,使用的是Silverlight4,因此可以使用相對路徑。具體如下:
??? 如果WCF服務和Silverlight應用在同一個站點,同時使用的是Silverlight 4,比如你的Silverlight應用包是在http://foo.com/clientbin/myapp.xap 路徑,WCF服務路徑是http://foo.com/helloworldservice.svc。
那么在Silverlight 4中可以使用相對路徑的服務引用。如果你的XAP包是在/ClientBin/MyApp.xap,而服務是在與ClientBin相同的根路徑/HelloWorldService.svc,那么就可以使用“../HelloWorldService.svc”。也就是說相對路徑是相對與XAP包所在的路徑。配置信息如下:
?? 1: <endpoint address="../HelloWorldService.svc"
?? 2:???????????????? binding="customBinding" bindingConfiguration="RelativeBinding"
?? 3:???????????????? contract="HelloServices.HelloWorldService" name="RelativeBinding" />
經過測試,此方法可行!問題解決。
總結
以上是生活随笔為你收集整理的(转)在WCF服务的ServiceReferences.ClientConfig中使用相对路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6个精心整理的资源网站,送给正在努力的你
- 下一篇: 线程同步时,哪些操作会释放锁?哪些操作不