在WP7中调用普通的Web服务

时间:2012-01-23 06:02:24

标签: .net web-services windows-phone-7

我有正常的.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服务?

请帮帮我。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

我认为您混淆了在服务器上运行的Web服务类,以及由Visual Studio中的“添加服务引用”对话框生成的代理类。

代理类公开了一些方法,这些方法提供了一种在Web服务上调用[WebMethod]方法的方法。对于字段(即使是公共字段)也不会这样做。

你不会想要这样做,因为它会导致大的缩放问题 - 如果两个不同的客户都改变了'msh'的价值怎么办?

您最好将所需的状态传递给每种服务方法。