我有正常的.NET Web服务(不是WCF服务)。
我已使用服务参考将此服务添加到我的WP7项目,因为我们没有。通常我们将使用“添加服务引用”选项添加WCF服务,但在此我使用“添加服务引用”选项添加了普通Web服务。
例如,我有这样的服务:
public class Service1
{
//local class variable
public MsgHeader msh;
//I have two functions like below:
[WebMethod]
public int Fun1()
{
return 1;
}
[WebMethod]
public int Fun2()
{
// Here i am checking msh(MsgHeader) values with the database.
//If this information is not correct i am not proceeding further.
// some calculations
return result; //returning some results
}
}
我在WP7中调用这样的方法:
Class TestModel
{
public void TestFun1()
{
RS.Service1SoapClient objRS = new RS.RSService1SoapClient();
objRS.Fun1Completed += new EventHandler<RS.Fun1CompletedEventArgs>(objRS_Completed);
objRS.Fun1Async();
}
private void objRS_Completed(object sender, EventCompletedEventArgs e)
{
string str = e.Result;
responseEventArgs = new ResponseEventArgs();
responseEventArgs.response = e.Result;
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(responseEventHandler, responseEventArgs);
}
}
在这里,我可以成功获得Fun1的结果。但我在同一服务中还有一个功能(Fun2),它使用Service类变量(如Fun2中的变量 msh )。当我添加服务引用时,我得到的Service类名为Service1SoapClient(如TestFun1函数中的TestModel所示),我在TestFun1()函数中创建了该类的对象(在wp7中)。这个对象(ServiceSoap1Client) )没有名为 msh 的变量,但Service1SoapClient类具有函数Fun2Async()和事件Fun2Completed。
我在visual studio 2010中使用“添加Web引用”添加了相同的服务。
这里我得到了同名的Service类,我为该类创建了对象,这里我可以得到变量 msh 但是我无法在WP7中获得相同的变量。
Visual Studio 2010中的Web参考代码
Private void Test()
{
SR.Service1 objS=new SR.Service1();
SR.MsgHeader msh=new SR.MsgHeader();
msh.Name="test";
// I have given some more values to msh
objS.msh=msh;
int result= objS.Fun2();
}
我的问题是:
1)我使用服务参考添加了正常的Web服务,因为我们没有在Visual Studio 2010 express for windows phone中添加Web引用。是对的吗?
2)我已经使用服务参考添加了正常的Web服务,如果它是正确的方法我怎样才能获得该变量msh?
3)我已经使用服务参考添加了普通的Web服务,如果不是正确的方法我如何在WP7中调用普通的Web服务?
请帮帮我。 提前谢谢。
答案 0 :(得分:2)
我认为您混淆了在服务器上运行的Web服务类,以及由Visual Studio中的“添加服务引用”对话框生成的代理类。
代理类公开了一些方法,这些方法提供了一种在Web服务上调用[WebMethod]方法的方法。对于字段(即使是公共字段)也不会这样做。
你不会想要这样做,因为它会导致大的缩放问题 - 如果两个不同的客户都改变了'msh'的价值怎么办?
您最好将所需的状态传递给每种服务方法。