我已经编写了一个配置为programmaticaly的简单WCF Web服务。它暴露了结合不同绑定到相同的合同三个端点:将WCF服务的编程配置转换为配置文件
- 的WebHttpBinding
- WebHttpRelayBinding(超过微软Azure)
- myBinding(自制的额外的DLL绑定)
的配置代码目前相当直接:
WebServiceHost host = new WebServiceHost(
typeof(MyService), new Uri("http://localhost:80/"));
host.AddServiceEndpoint(typeof(MyService), new WebHttpBinding(), "");
ServiceEndpoint sbEndpoint = host.AddServiceEndpoint(
typeof(MyService), new WebHttpRelayBinding(), "http://azureURL");
TransportClientEndpointBehavior sbBehavior =
new TransportClientEndpointBehavior();
sbBehavior.CredentialType = TransportClientCredentialType.UserNamePassword;
sbBehavior.Credentials.UserName.UserName = "azureUserName";
sbBehavior.Credentials.UserName.Password = "azurePassword";
sbEndpoint.Behaviors.Add(sbBehavior);
host.AddServiceEndpoint(typeof(MyService), new MyBinding(), "http://someURL");
host.Open();
现在我想将配置导出到配置文件中,因为我希望能够在不必重新编译的情况下对其进行更改。
我在这一刻的问题是:
- 我在哪里可以找到有价值的信息,从而实现我的目标?大多数网站只是谈论SOAP绑定 - 没有关于如何包含非标准绑定的信息。
- 我是否必须更改MyBinding才能通过app.config接受配置,或者ServiceModel如何调用它与编程方式完全相同?
感谢您解释构建配置文件的过程。如您所料,服务实施也是合同。我选择了这个,因为合同只包含两个非常通用的功能,并且不可重用。我刚刚尝试过使用webHttpBinding并将现有的程序化设置注释掉。但是,它不起作用。当我在我的Web浏览器中打开http:// localhost时,服务无法访问。我是否必须为VS中的应用程序做一些其他设置? (这是目前标准的“控制台应用程序”。) – Etan 2009-08-14 15:23:30
嗯,你有一个问题是:对于webHttp绑定,你需要WebServiceHost - 对于其他绑定,你需要直接的ServiceHost - 所以你可能不会能够在单个(Web)ServiceHost中托管所有端点 – 2009-08-14 15:39:38