选择通过API端点访问WCF还是通过Dll引用

时间:2018-03-08 08:40:43

标签: c# azure wcf webforms wcf-endpoint

我一直在考虑陷入困境几个小时。我有一个Visual Studio解决方案,其中包含WCF,WebForms,UWP,Xamarin和SharedLibrary项目。 我打算使用WCF项目作为后端,它与数据库通信并处理电子邮件和SMS集成并提供其他应用程序。

选项A. 目前,WCF托管在Azure应用服务上,通过POST,GET等可以从以下网址访问:https://mywcfprojectlink.azurewebsites.net/service1.svc/GetUsers

通过这样的安排,我可以执行POST请求以从应用程序获取数据:

 string response = string.Empty;
        string url = "https://mywcfprojectlink.azurewebsites.net/service1.svc/GetUsers";
        try
        {
            var values = new Dictionary<string, string>
            {
               { "data", Encryption.EncryptString(dat.ToString()) }  //dat is incoming method param
            };
            string jsonString = JsonConvert.SerializeObject(values);
            var cli = new WebClient();
            cli.Headers[HttpRequestHeader.ContentType] = "application/json";
            response = cli.UploadString($"{url}", jsonString);
            var result = JsonConvert.DeserializeObject<string>(response);
            topic.InnerText = Encryption.DecryptString(result.ToString());
        }
        catch (Exception)
        {
            return string.Empty;
        }

上面的方法很简单,因为我有其他的方法,我用模型/类反序列化。

选项B. 我同样可以通过将项目引用添加到我的WebForms来访问service1中定义的方法,这令人惊讶地也与xamarin兼容,但与UWP不兼容。不过,我对WebForms场景很感兴趣。以下是一个示例方法:

using BackEnd;
        //Service1 service1 = new Service1();
        //var send = service1.GetUsers(dat.ToString()); //dat is incoming method param
        //topic.InnerText = send;

显然,使用选项B可以消除对正在发送的数据进行加密,解密,序列化或反序列化的需要。但是,我有严重的性能问题。 我需要知道更好的选择,如果还有另一种选择(可能是Azure资源),您可以与我分享。

1 个答案:

答案 0 :(得分:0)

如果您决定使用Azure网站的https端点,则选项A因SSL加密而安全。所以你不必自己加密/解密它。唯一的建议是创建一个合适的授权机制。例如,使用TransportWithMessageCredential。下面的文章https://www.codeproject.com/Articles/1092557/WCF-Security-and-Authentication-in-Azure-WsHttpBin

中提供了一个示例