我有一份学校作业,我遇到了一个我无法理解错误的问题。
在我的学校作业中,我们创建了一个与我的老师服务相同的服务。服务的重点是能够与我们连接到我们服务的聊天客户进行沟通。
我遇到的问题是我的任务是能够在两个服务之间切换(类型为servicename.ServiceSoapClient(“ServiceSoap12”))。在我创建的服务中,我将命名空间放入我的教师服务中:[WebService(Namespace =“http://dsweb.tmd.hv.se/users/wsi400/ChatService/”)] (那是为了以后的目的,见下文)
我的服务代码(应该几乎相同(相同的返回值和输入值))在这里:http://pastie.org/2461928
现在到了真正的问题..
为一个服务创建客户端是一件小事,试图在客户端只使用一个引用来改变它们之间似乎是不可能的(但是其他人已经设法做到了,但是在检查了代码等之后,我们不知道我的错误。我有,正如我所说,添加了对我的服务(我的asmx文件)的本地引用,那是因为我显然需要指向我的老师服务的命名空间。
连接我的服务时,我使用以下代码:
wsChatService.ServiceSoapClient wsService = new wsChatService.ServiceSoapClient("ServiceSoap12");
添加我的服务时,它会在app.config中生成很多东西,我更改了一个值,以便能够切换到我的老师服务:
<client>
<endpoint address="http://dsweb.tmd.hv.se/users/wsi400/ChatService/Service.asmx" binding="basicHttpBinding"
bindingConfiguration="ServiceSoap" contract="wsChatService.ServiceSoap"
name="ServiceSoap" />
<endpoint address="http://dsweb.tmd.hv.se/users/wsi400/ChatService/Service.asmx" binding="customBinding"
bindingConfiguration="ServiceSoap12" contract="wsChatService.ServiceSoap"
name="ServiceSoap12" />
</client>
现在我尝试使用一个简单的按钮切换,测试功能在服务之间切换时始终有效,但取决于我选择用作程序集引用的服务,这是我可以发布消息的服务。
这是客户端的代码:
private void service1_Click(object sender, EventArgs e)
{
if (connNr == 2)
{
wsService = new wsChatService.ServiceSoapClient("ServiceSoap12", "http://localhost:63280/Service.asmx");
connNr = 1;
MessageBox.Show("Connection changed to: Markus \nTesting connection: " + wsService.Test());
textarray.Text = "";
MessageBox.Show("Trying to send message: " + wsService.SendMessage("babbel", "Connecting..", "Connected?"));
}
}
private void service2_Click(object sender, EventArgs e)
{
if (connNr == 1)
{
wsService = new wsChatService.ServiceSoapClient("ServiceSoap12", "http://dsweb.tmd.hv.se/users/wsi400/ChatService/Service.asmx");
connNr = 2;
MessageBox.Show("Connection changed to: http://dsweb.tmd.hv.se/users/wsi400/ChatService/Service.asmx \nTesting connection: " + wsService.Test());
textarray.Text = "";
MessageBox.Show("Trying to send message: " + wsService.SendMessage("babbel", "Connecting..", "Connected?"));
}
}
答案 0 :(得分:0)
我曾经一直遇到这种情况 此问题通常是因为WSDL定义中使用的命名空间。例如,我曾经在不同的服务器上遇到PHP SOAP服务的.NET客户端问题。
我在开发,测试和实时服务器上分别使用了dev.myserver.co.uk,test.myserver.co.uk和srv1.myserver.co.uk等名称空间。当我这样做时,我的.Net客户每次都必须重建,就像你遇到的问题一样。
我在每个Web服务上将我的命名空间更改为虚构的(名称空间不一定存在)xml.myserver.co.uk,然后您可以在C#客户端应用程序中重用生成的代理类
问题是,如果你不控制WSDL的定义,那么就不能轻易改变它。
一种愚蠢的方法是在本地保存WSDL定义,进行更改并让客户端指向它。这样,您可以重用代理类,但会针对不同的服务器调用方法。