我一直在考虑陷入困境几个小时。我有一个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资源),您可以与我分享。
答案 0 :(得分:0)
如果您决定使用Azure网站的https
端点,则选项A因SSL加密而安全。所以你不必自己加密/解密它。唯一的建议是创建一个合适的授权机制。例如,使用TransportWithMessageCredential
。下面的文章https://www.codeproject.com/Articles/1092557/WCF-Security-and-Authentication-in-Azure-WsHttpBin