SOAP / WSDL / System.Web.Services和Windows Phone 8的问题

时间:2014-04-05 11:57:25

标签: c# visual-studio soap windows-phone-8 wsdl

我有一个旧的WindowsCE手机应用程序。我想为Windows Phone 8创建一个类似的应用程序。我最初的计划是重用旧的C#代码,特别是对于业务模型,并为新的UI / UX花费新的精力。

我的业务逻辑基于WSDL SOAP Web服务。我有一个发布WSDL的java Web服务器,我在旧的Visual Studio中添加了一个Web引用,我在两个对等体(客户端/服务器)之间的通信很好。

然而,在Visual Studio 2013中,有很多东西是不同的。特别是缺少一些基本标题。例如,使用最新的4.5 SDK框架时可以访问System.Web.Service。

有没有机会重用我的旧代码。我的解决方案中可以有两个单独的项目吗?例如,旧代码可以与主项目分离。可以以某种方式创建一个外部库,使用旧代码触发Web服务,并在Windows Phone 8应用程序中包含该库?

2 个答案:

答案 0 :(得分:0)

  

有没有机会重用我的旧代码。我的解决方案中可以有两个单独的项目吗?例如,旧代码可以与主项目分离。可以以某种方式创建一个外部库,使用旧代码触发Web服务,并将该库包含在Windows Phone 8应用程序中?

有些如何,但你必须重写Client的大部分内容,使得与服务的连接

  

我的业务逻辑基于WSDL SOAP Web服务。我有一个发布WSDL的java Web服务器,我在旧的Visual Studio中添加了一个Web引用,并且我在两个对等体(客户端/服务器)之间的通信很顺利。

如果你已经在ServiceReference和View之间有一个图层,你可以将该图层作为接口移植,并在WP8(甚至是可移植的)类库中进行实现,以便在WP8项目中使用它

答案 1 :(得分:0)

特别缺少一些基本标题。

您可以使用

 公共类SoapHeader:MessageHeader     {         protected override void OnWriteStartHeader(XmlDictionaryWriter writer,MessageVersion messageVersion)         {             base.OnWriteStartHeader(writer,messageVersion);         }

    protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
    {
        writer.WriteStartElement("xx");
        writer.WriteXmlAttribute("xmlns", "http://xx");
        writer.WriteString("xx");
        writer.WriteEndElement();
                }

SoapHeader authSoapdHd = new SoapHeader();                 BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);

            MyPrintWebServiceSoapClient ws = new MyPrintWebServiceSoapClient();

            ws.ChannelFactory.Endpoint.Address = new EndpointAddress(new Uri(xxx.asmx"));
            ws.InnerChannel.OperationTimeout = TimeSpan.FromMilliseconds(6000);

            using (OperationContextScope scope = new OperationContextScope(ws.InnerChannel))
            {
                OperationContext.Current.OutgoingMessageHeaders.Add(authSoapdHd);
                ws.LogInCompleted += ws_LogInCompleted;

                LogInRequest request = new LogInRequest(xxx, yyy);
                ws.LogInAsync(request);
            }