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

本文关键字:Phone 问题 Windows Services WSDL System Web SOAP | 更新日期: 2023-09-27 17:56:42

我有一个旧的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 应用程序中?

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

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

有些是的,但您必须重写客户端女巫与服务建立连接的大部分部分

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

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

特别是缺少一些基本标头。

您可以使用

公共类 SoapHeader : MessageHeader { protected override void OnWriteStartHeader(XmlDictionaryWriter writer, MessageVersion messageVersion) { 基础。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);
            }