Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 渠道工厂<;T>;无接口_C#_Wcf_Soap - Fatal编程技术网

C# 渠道工厂<;T>;无接口

C# 渠道工厂<;T>;无接口,c#,wcf,soap,C#,Wcf,Soap,我目前正在尝试创建一个调用WCFSOAP服务的REST代理,我一直在尝试创建一个通道来发送消息。我知道我需要使用ChannelFactory,但我没有该服务的接口。是否有可以传递的默认值?是否有其他方式来打包信息 当我说message时,我指的是来自ServiceModels.Channels.message的消息 我对此非常陌生,因此非常感谢您的帮助。ChannelFactory.CreateChannel创建一个实现提供的接口的对象,并IClientChannel。该接口必须与服务匹配 您不

我目前正在尝试创建一个调用WCFSOAP服务的REST代理,我一直在尝试创建一个通道来发送消息。我知道我需要使用ChannelFactory,但我没有该服务的接口。是否有可以传递的默认值?是否有其他方式来打包信息

当我说message时,我指的是来自ServiceModels.Channels.message的消息


我对此非常陌生,因此非常感谢您的帮助。

ChannelFactory.CreateChannel
创建一个实现提供的接口的对象,并
IClientChannel
。该接口必须与服务匹配

您不需要与服务使用的DLL相同的DLL。您可以创建自己的接口以匹配服务的定义。在
ServiceContract
属性中,设置名称和名称空间以匹配服务的名称和名称空间。

您可以通过以下两种方式之一从WSDL服务协定中选择:

  • 在VisualStudio中使用对话框
  • 使用命令行实用程序
任何一种方式都将生成与服务契约公开的类型以及可用于调用服务操作的.NET类相对应的.NET类:

try
{
    var client = new MyServiceClient();
    client.DoSomething();
    client.Close();
}
catch
{
    if (client != null)
    {
         client.Abort();
    }
}
如果希望使用较低级别,则应使用生成的界面:

try
{
    var factory = new ChannelFactory<MyServiceChannel>();
    var client = factory.CreateChannel();
    client.DoSomething();
    client.Close();
}
catch
{
    if (client != null)
    {
         client.Abort();
    }
}
试试看
{
var factory=新的ChannelFactory();
var client=factory.CreateChannel();
client.DoSomething();
client.Close();
}
抓住
{
如果(客户端!=null)
{
client.Abort();
}
}

您的Web服务不能两者兼而有之。它是哪一个?这就是为什么它是一个代理,它接受一个rest调用,从rest调用中提取一个参数,将其打包为soap消息,将其发送到soap服务,获取响应,解析它,然后通过我看到的rest服务将其发送回。我误解了“代理”这个词,我以为你指的是客户端代理:)SOAP服务的接口缺失了吗?是的,我想知道是否有一个默认接口可以替代使用?你有服务的WSDL合同吗?有没有办法从WSDL自动生成此接口?@SmashCode是的,使用Visual Studio中的“添加服务引用”对话框或svcutil命令行实用程序。谢谢,我最终从服务器访问了源代码,并复制了所需的接口,但如果我只有wsdl,这也可以解决问题,所以我接受这一点。谢谢。我明白了。我想你在一条评论中说你确实有WSDL合同。无论如何,我很高兴我能帮上忙:)我用了一种奇怪的措辞,恩里科。我确实有WSDL,但现在我有了WSDL和源代码,所以我只使用了源代码而不是WSDL,但是如果我只有WSDL而没有源代码,您的答案就可以了。