繁体   English   中英

我可以从 ASP.Net Web API 调用 WCF 端点吗?

[英]Can I call a WCF endpoint from ASP.Net Web API?

我有一个带有使用 rest http(post/get 调用)的控制器方法的 web api。 客户端通过普通的 httpclient 调用使用这个 API,我将一个 http 响应传回。

我的用例是我有一个需要调用另一台服务器的遗留方法。 此方法目前使用 WCF 和合同绑定,但我不想在此 API 项目中使用 WCF。

有没有办法我仍然可以只使用 WEB API 调用这些方法,或者我必须混合架构(Web api 和 WCF)?

这是正常的方法调用

  1. 首先我初始化代理

     var proxy = GetAccountProxy(); public static AcountClient GetAccountProxy() { var client = new AccountClient(); client.ClientCredentials.ClientCertificate.SetCertificate(...); return client; }
  2. 我通过代理连接到另一台服务器上的方法

    var accountInfo = proxy.GetAccountInfo(xmlAccount);

     public string AccountInfo(string sXml){ AccountLookup val = new AccountLookup(); val.Body = new AccountLookupRequestBody(); val.Body.XML = sXML; AccountLookupResponse retVal = ((AccountLookupResponse)(this)).AccountLookup(val); return retVal;

    }

在我的 webconfig 中,端点看起来像这样

<endpoint address="https://www.mylookup.com/AccountLookupWS/AccountLookupWS.svc/wshttp" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IAccountLookupWS" contract="AccountLookupWS.IAccountLookupWS" name="WSHttpBinding_IAccountLookupWS1" />

所以我的问题是我可以使用普通的 rest httpclient 调用来调用这个端点并获得相同的结果吗?

 Uri baseUrl = new Uri("https://www.mylookup.com/AccountLookupWS/AccountLookupWS.svc/wshttp");
            IRestClient client = new RestClient(baseUrl);
            IRestRequest request = new RestRequest("GetAccountInfo", Method.GET) 
            request.AddParameter("XmlAccount", sXml);

            IRestResponse<dynamic> response = client.Execute<dynamic>(request);

            if (response.IsSuccessful)
            {
                response.Data.Write();
            }
            else
            {
                Console.WriteLine(response.ErrorMessage);
            }

            Console.WriteLine();

一般来说,可以通过webrequest访问wcf,但这取决于wcf服务的实现。 查看 WebGet 和/或 WebInvoke 属性https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.web.webgetattribute?view=netframework-4.8并从那里开始。 这是在 WCF 端完成的工作,正确完成后,您可以像正常的休息服务一样访问您的 wcf。

这取决于您的 WCF 服务器绑定。 你看,HTTP/s 协议实现只是 WCF 的可能模块,它的一部分,就像任何其他协议一样 - 它只是称为binding 不同的绑定意味着相同的绑定应该在客户端,否则他们不会相互理解。

例如,如果服务器告诉:

  • 在我通过电线发送的数据上使用 gzip
  • 如果第一位设置为真,那么我用 666 异或我的数据
  • 然后使用 SSL 来保护它
  • 然后通过 TCP 发送

然后客户端应该反过来做同样的事情。 这就是 WCF,它的灵活性为研究人员和开发人员打开了地狱之门。

正如我所说,如果你的服务器支持 HTTP 绑定,没有额外的东西 - 你很好。 使用 http 客户端或十亿其他 HTTP 类。 如果没有 - 将您的服务器协议绑定移植到NET Core并使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM