6

嘿伙计们,

我正在尝试使用 Mono 从我的 Ubuntu 主机访问托管在虚拟机(Windows 7)上的 Web 服务。

我可以导入 wdsl 文件并生成服务参考。我从另一个正确访问 Web 服务的工作客户端复制了 App.config。

当我尝试使用系统连接到网络服务时;

namespace MonoTest
{
class MainClass
{
    public static void Main (string[] args)
    {
        Console.WriteLine ("Hello World!");
        TestServer.Service1Client client = new TestServer.Service1Client("Test");
        Console.WriteLine(client.GetData(12));
        Console.ReadLine();
    }
}
}

我收到一个错误:

System.InvalidOperationException: Client endpoint configuration 'Test' was not found in 1 endpoints.
  at System.ServiceModel.ChannelFactory.ApplyConfiguration (System.String endpointConfig) [0x00000] in <filename unknown>:0 
  at System.ServiceModel.ChannelFactory.InitializeEndpoint (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
  at System.ServiceModel.ChannelFactory`1[MonoTest.TestServer.IService1]..ctor (System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
  at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1].Initialize (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) [0x00000] in <filename unknown>:0 
  at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1]..ctor (System.ServiceModel.InstanceContext instance, System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
  at System.ServiceModel.ClientBase`1[MonoTest.TestServer.IService1]..ctor (System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
  at MonoTest.TestServer.Service1Client..ctor (System.String endpointConfigurationName) [0x00000] in <filename unknown>:0 
  at MonoTest.MainClass.Main (System.String[] args) [0x0000a] in /home/***/WebserviceTest/MonoTest/MonoTest/Main.cs:11 

我的 App.config 文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IService1" />
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint name="Test"
                address="http://192.168.178.34:8732/Design_Time_Addresses/TestServer/Service1/"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
                contract="ServiceReference1.IService1" >
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

有没有人使用Linux使它工作?

4

2 回答 2

9

Mono 的 WSDL 导入工具还不支持自动配置生成,您需要在app.config.

您在此处看到的错误意味着 WCF 找不到终结点配置部分。

问题的详细技术原因

你得到这个是因为 Visual Studio 和 Mono 有一种不同的、不兼容的方式来引用配置部分。

在 Visual Studio 中添加服务引用时,它会自动在您的app.config. generate 中的“合同名称”<endpoint ... contract="contract name">不一定是 generated 中数据合同类的完全限定名称Reference.cs

相反,Visual Studio 发出

    [ServiceContractAttribute(ConfigurationName="contract name")]
    public interface YourContract {
            ....
    }

与元素中的ConfigurationName相同<endpoint ... contract="...">,这就是 WCF 查找端点配置的方式。

在 Mono 中,由于我们还不支持配置文件生成,我们发出

    [ServiceContractAttribute]
    public interface YourContract {
            ....
    }

如果没有ConfigurationName参数,则默认为该接口的完全限定名称。

如何解决您的问题

要使其工作,您需要编辑文件并在元素app.config中使用服务合同接口的完全限定名称。<endpoint ... contract="...">

在您的情况下,更改contract="ServiceReference1.IService1"contract="TestServer.IService1"应该这样做。

否则,查看生成的Reference.cs,搜索带有 a 的接口[ServiceContractAttribute]以及它所在的 C# 命名空间。

于 2012-11-27T02:12:47.513 回答
0

Mono WCF 是 dotnet WCF 的部分实现,因此不支持少数功能和绑定:

还有一篇文章说

没有计划支持的组件

WSHttpBinding及其依赖项 TransactionFlow ReliableSession

请参阅: http ://www.mono-project.com/WCF_Development

于 2013-06-04T11:17:40.450 回答