20

我需要在不添加服务引用的情况下访问 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;
}
4

5 回答 5

23

您可以如下使用。只需确保添加服务合同参考。

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");

这里你可以得到充分的锻炼。

于 2013-10-30T06:56:43.097 回答
3

是的,可以在不添加服务引用的情况下作为 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);

希望这可以帮助

于 2013-10-30T06:56:41.377 回答
2

用这个冒着降价私刑暴徒的风险,但是......

如果您不添加引用的原因是因为您需要在运行时选择 URL,您仍然可以添加引用,然后在需要时更改它:

MyProxy.Endpoint.Address = new EndpointAddress(MyUri);

(或者在实例化时在构造函数中做同样的事情)。

于 2014-05-22T00:28:53.193 回答
0

我没有评论“Thilina H”的答案的声誉,但你可以使用代码

ServiceContract channel = factory.CreateChannel();

仅当您写道:

var factory = new ChannelFactory<ServiceContract>(binding, address);

反而

ChannelFactoryfactory = new ChannelFactory<ServiceContract>(binding, address);
于 2014-08-22T10:38:03.167 回答
0

当 John 这样做时:“第 2 步:将服务引用添加到我的应用程序。” Visual Studio 将端点和默认绑定添加到他的应用程序的 app.config 文件中。他不需要指定 URL。只要服务实现了所需的合同,John 的代码就应该可以正常工作。

于 2015-04-29T16:26:30.440 回答