在Windows 8中使用WSDL Web服务存储C#应用程序:无法解析基类或接口

Olc*_*taş 5 c# wsdl windows-store-apps

我在Eclipse中用Java编写了一个简单的WSDL Web服务.以下是该服务的Java代码原型:

public static String vriteAnnouncement(String title, String body){
    ...
}
Run Code Online (Sandbox Code Playgroud)

我使用Microsoft wsdl.exe工具为此WSDL服务生成了一个代理类,并使用Developer Command Prompt Visual Studio 2012中的以下命令将其设为dll:

wsdl /l:CS /protocol:SOAP WriteAnnouncement.wsdl
csc /t:library /r:System.Web.Services.dll /r:System.Xml.dll WriteAnnouncementService.cs
Run Code Online (Sandbox Code Playgroud)

在我的Windows 8商店应用程序中,我添加了对此dll的引用,然后在MainPage.xaml.cs中添加了以下代码:

WriteAnnouncementService was = new WriteAnnouncementService();
Run Code Online (Sandbox Code Playgroud)

当我尝试运行该应用程序时,我收到此错误:

类型'System.Web.Services.Protocols.SoapHttpClientProtocol'在未引用的程序集中定义.
您必须添加对程序集'System.Web.Services,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'的引用.
C:\ Users ...\MainPage.xaml.cs第27行第13列

然后我添加了对System.Web.Service的引用并重新构建了应用程序.现在我收到以下错误:

无法解析类型为"System.Web.Services.Protocols.WebClientProtocol"的程序集"System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089"中的基类或接口"System.ComponentModel.Component" :\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Web.Services.dll

Olc*_*taş 1

通过“添加服务引用”添加服务尊重解决了这个问题。 在此输入图像描述

在此输入图像描述

但生成的 reference.cs 文件还有另一个问题。关于不明确的调用存在多个错误。

以下方法或属性之间的调用不明确:“GyteKiosk.ServiceReference1.WriteAnnouncementClient.ConfigureEndpoint(System.ServiceModel.Description.ServiceEndpoint, System.ServiceModel.Description.ClientCredentials)”和“GyteKiosk.ServiceReference1.WriteAnnouncementClient.ConfigureEndpoint(System.ServiceModel)” .Description.ServiceEndpoint、System.ServiceModel.Description.ClientCredentials)'参考.cs 115 13

更新!

我也解决了不明确的通话问题。模糊调用的分步解决方案:

  1. 我的服务类名称是“WriteAnnouncement”,服务方法名称是“vriteAnnouncement”。将方法名称更改为“write”。
  2. 在 Eclipse 中重新创建 Web 服务,无需任何测试客户端。
  3. 获取 WSDL 文件并将其放置在项目文件夹中。
  4. 删除了之前添加的服务引用并读取了服务引用。将 neme 提供给服务引用作为“WAServRef”

在项目中使用服务:

  1. 添加using GyteKiosk.WAServRef;到您将在其中使用服务的页面代码。
  2. 在您想要使用的地方致电您的服务:

        WriteAnnouncementClient wac = new WriteAnnouncementClient();
        Task<GyteKiosk.WAServRef.writeResponse> wres = wac.writeAsync("Gyte Kiosk", "Gyte Kiosk");
        String result = wres.Result.Body.writeReturn;
        this.pageTitle.Text = result;
    
    Run Code Online (Sandbox Code Playgroud)