Silverlight忽略来自web.config文件的WCF路径

我正在编写一个调用WCF服务的Silverlight应用程序。Silverlight忽略来自web.config文件的WCF路径

另一种解决方案包含了Silverlight的以下项目:
- Web项目托管Silverlight应用程序
- Silverlight应用程序项目
- 与服务引用WCF

的Silverlight类库项目,当我上运行Silverlight应用程序我的locahost,Silverlight使用本地主机调用WCF并且正常工作。

然后,我发布了服务和Web应用程序并将其部署到另一台服务器。 web.config文件被修改为指向已部署的端点地址。

现在,运行Silverlight应用程序将查找服务的本地主机url,尽管web.config中的端点是部署服务器的端点。

Silverlight应用程序从哪里查找svc url? 它似乎没有从web.config文件中读取它。但是,似乎更像是在构建/发布过程中将url嵌入到程序集中。

任何想法??

感谢您的阅读!

回答:

silverlight应用程序根本不会查看托管服务器的web.config - 这是在服务器端,并且对客户端上运行的Silverlight应用程序不可见。当您在代码中创建本地服务代理时,Silverlight应用程序将在它自己的ServiceReferences.clientconfig文件中或在您以编程方式指定的URL中查找。

因此,您有2个选项:
1.在构建可部署版本的Silverlight应用程序之前,修改ServiceReferences.clientconfig。
2.使用代码构建您的客户端端点的URL。

我们使用第二个选项,因为我们希望有一个标准的编程接口来配置我们的端点。我们做这样的事情(但不与的MaxValue的,如果它是一个面向公众的服务,当然):

public ImportServiceClient CreateImportServiceClient()

{

return new ImportServiceClient(GetBinding(), GetServiceEndpoint("ImportService.svc"));

}

public ExportServiceClient CreateExportServiceClient()

{

return new ExportServiceClient(GetBinding(), GetServiceEndpoint("ExportService.svc"));

}

protected override System.ServiceModel.Channels.Binding GetBinding()

{

BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);

binding.MaxBufferSize = int.MaxValue;

binding.MaxReceivedMessageSize = int.MaxValue;

binding.SendTimeout = TimeSpan.MaxValue;

binding.ReceiveTimeout = TimeSpan.MaxValue;

return binding;

}

protected EndpointAddress GetServiceEndpoint(string serviceName)

{

if (Settings == null)

{

throw new Exception("Service settings not set");

}

return

new EndpointAddress(ConcatenateUri(Settings.ServiceUri,serviceName));

}

protected EndpointAddress GetServiceEndpoint(string serviceName, Uri address)

{

if (Settings == null)

{

throw new Exception("Service settings not set");

}

return new EndpointAddress(ConcatenateUri(address, serviceName));

}

像“ImportServiceClient”和“ExportServiceClient”的类是从创建服务引用到生成的代理我们的WCF服务。 Settings.ServiceUri是我们存储应该与之交谈的服务器地址的地方(在我们的例子中,它通过参数动态设置到托管页面中的silverlight插件,但是您可以使用任何您喜欢的方案来管理这个地址)。

但是,如果你喜欢简单地调整ServiceReferences.ClientConfig,那么你不需要任何这样的代码。

回答:

我在asp页面中使用silverlight对象的InitParams,该页面托管Silverlight以传递WCF服务url。你可以从asp页面的web.config中获取url。它适用于我的情况。

以上是 Silverlight忽略来自web.config文件的WCF路径 的全部内容, 来源链接: utcz.com/qa/265311.html

回到顶部