关于如何处理新要求,我现在已经绞尽脑汁待了几天。
我有两个网站。第一个允许用户填写应用程序。第二个网站是用于管理用户应用程序的内部网站。我需要开发一个“Web服务”,将应用程序数据从网站1发送到网站2,并向网站2返回成功或失败的响应。我以前从未做过网络服务,而且我对从哪里开始感到困惑。我一直在网上阅读各种例子,但它们似乎只是构建网络服务的起点......没有具体的例子。
因此,对于发布数据网站1,我的控制器方法会是什么样子?我是否使用Json将数据发布到网站2?那会是什么样的例子?在指向网站2的方法中是否存在某种形式的重定向?
因此,要将回复发布回网站2,那控制器方法会是什么样子?我想我会再次使用Json将回复发送回网站1?在指向网站1的方法中是否存在某种形式的重定向?
答案 0 :(得分:1)
我会使用JSON并将应用程序POST到Web服务。
首先,我假设应用程序数据包含在某种类型的对象中。使用JSON.Net将对象序列化为JSON。它看起来像下面的代码。
var application = new Application();
string serializedApplication = JsonConvert.Serialize(application);
其次是POST你的端点代码(webservice,mvc action)。为此,您需要对端点进行HTTPRequest。以下代码是我用来POST代码的代码。
public bool Post(string url, string body)
{
//Make the post
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true;
var bytes = Encoding.Default.GetBytes(body);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
Stream stream = null;
try
{
request.KeepAlive = false;
request.ContentLength = bytes.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = -1;
request.Method = "POST";
stream = request.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
}
finally
{
if (stream != null)
{
stream.Flush();
stream.Close();
}
}
bool success = GetResponse(request);
return success;
}
public bool GetResponse(HttpWebRequest request)
{
bool success;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
if (response.StatusCode != HttpStatusCode.OK && response.StatusCode != HttpStatusCode.Created)
{
throw new HttpException((int)response.StatusCode, response.StatusDescription);
}
var end = string.Empty;
using (StreamReader reader = new StreamReader(responseStream))
{
end = reader.ReadToEnd();
reader.Close();
success = JsonConvert.DeserializeObject<bool>(end);
}
response.Close();
}
}
return success;
}
现在您可以将POST JSON发送到端点并接收响应,下一步是创建端点。以下代码将帮助您开始使用mvc中的端点,该端点将接收应用程序并对其进行处理。
[HttpPost]
public ActionResult SubmitApplication()
{
//Retrieve the POSTed payload
string body;
using (StreamReader reader = new StreamReader(Request.InputStream))
{
body = reader.ReadToEnd();
reader.Close();
}
var application = JsonConvert.Deserialize<Application>(body);
//Save the application
bool success = SaveApplication(application);
//Send the server a response of success or failure.
return Json(success);
}
以上代码是一个良好的开端。请注意,我尚未测试此代码。
答案 1 :(得分:0)
您显然有多个客户端用于数据和操作。所以服务就是你要找的。
ASP.NET MVC是开发RESTful服务的理想选择。如果您(和您的经理)准备使用测试版,那么Checkout ASP.NET-Web API。
如果您想使用稳定的产品,请转到MVC3。您可能需要编写一些自定义代码来将XML中的数据以及JSON返回给服务器不同类型的客户端。那里有一些tutorials。
因此,创建一个服务(ASP.NET MVC / WCF服务)。然后,您可以创建2个客户端应用程序,一个用于外部客户端,另一个用于内部用户。这两个应用程序都可以调用服务中的方法来创建/读取用户帐户/或您想要执行的任何操作。
为了使应用程序更具交互性和生动性,您可以考虑使用名为wonderful thing的SiganalR,它可以帮助您获得一些实时数据,而无需在每个数据库/中间层中连续轮询n秒!