【问题标题】:Calling asmx service from .net core api2从 .net core api2 调用 asmx 服务
【发布时间】:2020-02-12 23:31:03
【问题描述】:

我需要从 .net 核心 web api 调用旧的 asmx web 服务(我无法控制)

有可能吗?

谢谢

【问题讨论】:

    标签: asp.net-web-api .net-core


    【解决方案1】:

    我能够做到这一点的方式是完全更新 Visual Studio 2017,然后从这里获取最新的 WCF 连接服务扩展: https://marketplace.visualstudio.com/items?itemName=WCFCORETEAM.VisualStudioWCFConnectedService

    完成此操作后,我可以像这样添加和调用 SOAP 服务。
    右键单击 Connected Services 文件夹(应该出现在您的项目下方)并选择 Add Connected Service。然后选择“添加 WCF Web 服务”。将您的 asmx url 放入 URI 字段,设置名称空间并单击 Finish。您现在将拥有参考集。
    我的代码的一个示例...
    如果您没有授权标头,则可以忽略该部分:

    MySoapClient.EndpointConfiguration endpoint = new MySoapClient.EndpointConfiguration();  
    MySoapClient myService = new MySoapClient(endpoint, myURL);              
    AuthorizationSoapHeader MyAuthHeader = new AuthorizationSoapHeader();
    
    MyAuthHeader.AppName = FDSServiceAppName;
    MyAuthHeader.AppID = Guid.Parse(MyAppID); 
    
    Entry[] entries = MyService.GetUsers().Result;
    

    【讨论】:

    • 感谢您的回复,刚刚看到这个。我使用了 Visual Studio WCF 连接服务,但想知道是否有一种方法可以在不生成所有代码的情况下直接使用通道
    • 不客气。我以前的方法如下。(我不确定还有其他路线可以走)。由于我的核心项目以 .NET Framework 4.6.1 为目标,因此我创建了一个附加项目(一个也以 .NET Framework 4.6.1 为目标的类项目)。从那里我可以像过去那样添加 Web 参考。在这个项目中,我创建了一个具有可公开访问的方法的类,该方法调用 asmx 服务。然后,在我的 MVC Core 项目中,我设置了对这个附加项目的引用,并且能够调用另一个项目的公共方法。
    • 链接/扩展已死,我正在使用 Visual Studio 2017 15.9.2
    【解决方案2】:

    接受的答案是 100% 正确的,但是当我尝试使用 VS WCF 连接服务添加 ASMX Web 服务时,我遇到了一个问题,但最初对我来说并不明显。

    在我的例子中,我尝试连接的 Web 服务禁用了 Web.config 中的 WSDL。我必须在 Web.config 中删除或注释掉以下内容,才能成功导入元数据并构建代码脚手架。

    <webServices>
      <protocols>
        <!-- <remove name="Documentation" /> -->
      </protocols>
    </webServices>
    

    一旦&lt;remove name="Documentation" /&gt; 像上面的示例一样被删除或注释掉,ASMX 服务将能够添加到您的项目中。

    【讨论】:

      猜你喜欢
      • 2012-05-29
      • 2013-03-27
      • 2012-03-16
      • 2010-10-16
      • 2019-09-18
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多