我有一个完美运行的silverlight应用程序,可以访问Silverlight应用程序本身托管的WCF服务。它使用的端口是1794。
当我部署到其他服务器(开发或测试或登台)时,应用程序无法访问WCF服务。
这是我的ServiceReference.ClientConfig的片段,如
<endpoint address="http://localhost:1794/MyWebService.svc"
binding="customBinding" bindingConfiguration="CustomBinding_MyWebService"
contract="ConfigMgmtServiceReference.MyWebService"
name="CustomBinding_MyWebService" />
我的根文件夹也包含clientaccesspolicy.xml文件。
我怎样才能解决这个问题?
答案 0 :(得分:1)
我怀疑localhost:1794
会导致问题 - 当Silverlight应用程序在客户端计算机上执行时,localhost将无法将其恢复到服务器。
我用来消除这类问题的技术是在运行时以编程方式设置端点。我需要的两个信息是我的服务的web项目中的位置(提前知道),以及Silverlight应用程序已经提供的地址(域)(我可以找到)。
private void initEndpoint(ServiceEndpoint endPoint, string serviceName)
{
Uri hostUri = Application.Current.Host.Source;
string wcfBaseUri = string.Format("{0}://{1}:{2}/WebServices/", hostUri.Scheme, hostUri.Host, hostUri.Port);
endPoint.Address = new EndpointAddress(new Uri(wcfBaseUri + serviceName));
}
在这段代码中,文件夹/WebServices
是我的Web服务位于我的Web应用程序中的位置。然后我调用这个函数:
LoggingServiceClient loggingService = new LoggingServiceClient();
initEndpoint(loggingService.Endpoint, "LoggingService.svc");
我的实际设置稍微复杂一些,因为我也希望能够覆盖它并手动配置端点,但是你明白了。通过这样做,我已经能够部署到各种设置,在奇数端口上运行web服务器,每次都可以使用silverlight-&gt; webservice位。