Hej家伙,
我正在尝试使用Mono从我的Ubuntu主机访问托管在虚拟机(Windows 7)上的Web服务。
我可以导入wdsl文件并生成服务引用。我从正确访问webservice的其他工作客户端复制了App.config。
当我尝试使用连接到Web服务时 使用System;
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工作?
答案 0 :(得分:8)
Mono的WSDL导入工具尚不支持自动配置生成,您需要在app.config
中手动配置端点。
您在此处看到的错误意味着WCF无法找到端点配置部分。
问题的详细技术原因
您得到的是因为Visual Studio和Mono具有不同的,不兼容的引用配置部分的方式。
在Visual Studio中添加服务引用时,它会自动创建并更新app.config
中的相应条目。生成的<endpoint ... contract="contract name">
中的“合同名称”不一定是生成的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
,搜索具有[ServiceContractAttribute]
的接口以及它所在的C#名称空间。
答案 1 :(得分:0)
Mono WCF是dotnet WCF的部分实现,因此不支持很少的功能和绑定:
还有一篇文章说
无计划支持的组件
WSHttpBinding 及其依赖项 TransactionFlow 的ReliableSession