是否可以在不添加服务参考的情况下访问 WCF 服务?
Posted
技术标签:
【中文标题】是否可以在不添加服务参考的情况下访问 WCF 服务?【英文标题】:Is possible to access WCF Service without adding Service Reference? 【发布时间】:2013-11-09 14:38:17 【问题描述】:我需要在不添加服务引用的情况下访问 Wcf 服务方法?怎么做?
第 1 步:创建 WCF 服务。 第 2 步:将服务引用添加到我的应用程序。 第 3 步:然后将 WCF 服务方法访问到应用程序中。
像这样,
ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client();
protected void Button1_Click(object sender, EventArgs e)
UserDetails userInfo = new UserDetails();
userInfo.UserName = TextBoxUserName.Text;
userInfo.Password = TextBoxPassword.Text;
userInfo.Country = TextBoxCountry.Text;
userInfo.Email = TextBoxEmail.Text;
string result = obj.InsertUserDetails(userInfo);
LabelMessage.Text = result;
【问题讨论】:
【参考方案1】:您可以如下使用。只需确保添加服务合同参考即可。
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://localhost:4684/Service1.svc");
ChannelFactory factory = new ChannelFactory<ServiceContract>(binding, address);
ServiceContract channel = factory.CreateChannel();
string resturnmessage = channel.YourMethod("test");
来自here,您可以在这方面得到充分锻炼。
【讨论】:
我觉得第三行应该是 ChannelFactory是的,可以在不添加服务引用的情况下作为 WCF 服务调用。
作为第一步,我假设您将服务联系接口作为一个单独的类库。
第 2 步:创建 WCF 服务并将其托管在 IIS 中
第 3 步:在客户端应用程序中引用您的服务合同库,然后按照此代码进行操作
ChannelFactory<IYourServiceContract> factory = new ChannelFactory<IYourServiceContract>("EndpointNameOfYourService");
factory.Endpoint.Address = new EndpointAddress("http://example.com/service");
IYourServiceContract client = factory.CreateChannel();
var result = client.YourMethodtoInvoke(serviceArguments);
希望对你有帮助
【讨论】:
【参考方案3】:用这个冒着让 Markdown 私刑暴徒冒险的风险,但是......
如果您不添加引用的原因是因为您需要在运行时选择 URL,您仍然可以添加引用,然后在需要时更改它:
MyProxy.Endpoint.Address = new EndpointAddress(MyUri);
(或者实例化时在构造函数中做同样的事情)。
【讨论】:
这是假设两个 uri 具有相同的“wsdl”...例如,您有 QA 和 PROD 服务器。对吗?【参考方案4】:我没有评论“Thilina H”答案的声誉,但你可以使用代码
ServiceContract channel = factory.CreateChannel();
只有你写了:
var factory = new ChannelFactory<ServiceContract>(binding, address);
改为
ChannelFactoryfactory = new ChannelFactory<ServiceContract>(binding, address);
【讨论】:
【参考方案5】:在约翰时这样做: “第 2 步:将服务引用添加到我的应用程序。” Visual Studio 将端点和默认绑定添加到他的应用程序的 app.config 文件中。他不需要指定 URL。只要服务实现了所需的合同,John 的代码应该可以正常工作。
【讨论】:
以上是关于是否可以在不添加服务参考的情况下访问 WCF 服务?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有 SDK 的情况下调用 Dynamics CRM 2011 后期绑定 WCF 组织服务 - 直接自定义绑定?
在不使用 WIFI 的情况下在 WCF 服务调用中包含 SAML 2.0 令牌
在WCF中,自定义Authentication,Validate方法,抛出错误异常时如何在不停止服务的情况下处理异常?