C# 是否可以在不添加服务引用的情况下访问WCF服务?

C# 是否可以在不添加服务引用的情况下访问WCF服务?,c#,asp.net,wcf,C#,Asp.net,Wcf,我需要访问Wcf服务方法而不添加服务引用?如何做到这一点 步骤1:创建WCF服务。 步骤2:将服务引用添加到我的应用程序。 步骤3:将WCF服务方法访问到应用程序中 这样, ServiceReference1.Service1Client obj = new ServiceReference1.Service1Client(); protected void Button1_Click(object sender, EventArgs e) { UserDetails userInfo

我需要访问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;
}

是的,可以作为WCF服务调用,而无需添加服务引用

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");
作为第一步,我假设您将服务联系人接口作为一个单独的类库

步骤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);
ChannelFactory=newchannelfactory(“EndpointNameOfYourService”);
factory.Endpoint.Address=新的端点地址(“http://example.com/service");  
IYourServiceContract客户端=工厂.CreateChannel();
var result=client.YourMethodtoInvoke(serviceArguments);

希望这对您有所帮助,您可以按如下方式使用。只需确保添加服务合同引用即可

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");
BasicHttpBinding=new BasicHttpBinding();
EndpointAddress地址=新的EndpointAddress(“http://localhost:4684/Service1.svc");
ChannelFactory工厂=新的ChannelFactory(绑定,地址);
ServiceContract channel=factory.CreateChannel();
string resturnmessage=channel.YourMethod(“test”);

从这一点上,你可以得到充分的锻炼。

冒着被降价林奇暴徒攻击的风险,但是

如果您不添加引用的原因是因为您需要在运行时选择URL,那么您仍然可以添加引用,然后在需要时使用以下方法进行更改:

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

(或者在实例化时在构造函数中执行相同的操作)。

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

ServiceContract channel=factory.CreateChannel();
除非你写下:

var-factory=新的ChannelFactory(绑定,地址);
反而

ChannelFactoryfactory=新的ChannelFactory(绑定,地址);
在约翰做这件事的时候: “步骤2:将服务引用添加到我的应用程序。”
Visual Studio将端点和默认绑定添加到其应用程序的app.config文件中。他不需要指定URL。只要服务实现了所需的合同,John的代码就可以正常工作。

我认为第三行应该是ChannelFactory factory=newchannelfactory(binding,address);使用System.ServiceModel@Thilina H,在.NET4.5中,我在“服务合同”下得到了红色的曲线。我根据第一条评论进行了修复,但仍然出现错误。它说“找不到类型或命名空间‘ServiceContract’”。。。如何正确引用ServiceContract以避免编译错误?在这个项目和/或WCF服务项目中需要做什么?在这里发布了一个新问题,并提供了更多的细节:这是假设两个uri具有相同的“wsdl”。。。比如说,你有QA和PROD服务器。对吗?