在通过 API Endpoint 或通过 Dll 引用访问 WCF 之间进行选择
Posted
技术标签:
【中文标题】在通过 API Endpoint 或通过 Dll 引用访问 WCF 之间进行选择【英文标题】:Choosing between accessing WCF via API Endpoint or via Dll reference 【发布时间】:2018-08-16 13:15:44 【问题描述】:我已经考虑了几个小时的两难境地。我有一个包含 WCF、WebForms、UWP、Xamarin 和 SharedLibrary 项目的 Visual Studio 解决方案。 我打算将 WCF 项目用作与数据库对话并处理电子邮件和 SMS 集成并提供其他应用程序的后端。
选项 A 目前,WCF 托管在 Azure 应用服务上,可以通过 POST、GET 等方式从 url 访问它: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】:如果您决定使用 Azure 网站的 https
端点,则选项 A 是安全的,因为 SSL 加密。所以你不必自己加密/解密它。唯一的提示是创建适当的授权机制。例如使用TransportWithMessageCredential
。下面的文章https://www.codeproject.com/Articles/1092557/WCF-Security-and-Authentication-in-Azure-WsHttpBin提供了一个示例
【讨论】:
azure提供的url i雪Https。太好了,我不必自己再次加密信息。我正在检查 TransportWithMessageCredential以上是关于在通过 API Endpoint 或通过 Dll 引用访问 WCF 之间进行选择的主要内容,如果未能解决你的问题,请参考以下文章
通过Rest API或客户端DLL创建具有'Contributors'类的Azure Devops(安全)组,并具有权限
Server EndPoint for WebSocket Java API中的易变变量?