是否可以在不添加服务参考的情况下访问 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 factory = new ChannelFactory(binding, address); 使用 System.ServiceModel; @Thilina H,在 .NET 4.5 中,我在“ServiceContract”下出现红色波浪线。我根据第一条评论进行了修复,但仍然出现错误。它说“找不到类型或命名空间'ServiceContract'”......我如何正确引用ServiceContract以避免编译错误?在这个项目和/或 WCF 服务项目中需要做什么? 在这里发布了更多细节的新问题:***.com/questions/35071525/…【参考方案2】:

是的,可以在不添加服务引用的情况下作为 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 组织服务 - 直接自定义绑定?

WCF 客户端证书停止工作

在不使用 WIFI 的情况下在 WCF 服务调用中包含 SAML 2.0 令牌

在WCF中,自定义Authentication,Validate方法,抛出错误异常时如何在不停止服务的情况下处理异常?

是否可以在不显示/添加视图的情况下在 iOS 上播放 YouTube 视频,同时仍遵守 YouTube 的服务条款?

ASP.NET 5 添加 WCF 服务参考