我想向我的 ASP.net (4) Forms 网站添加一个公共(外部可调用)JSON 数据馈送。为此,我创建了以下 Web 服务:
[WebService(Namespace = "http://localtest.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class BlogWebService : System.Web.Service.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Blog> GetLatestBlogs(int noBlogs)
{
return GetLatestBlogs(noBlogs)
.Select(b => b.ToWebServiceModel())
.ToList();
}
}
我已经通过打开在本地服务器上对此进行了测试
http://localhost:55671/WebServices/BlogWebService.asmx?op=GetLatestBlogs
它工作正常。
当我尝试远程访问此服务并收到内部服务器错误时。例如,我使用 LinqPad 运行了以下代码(基于来自http://geekswithblogs.net/JuanDoNeblo/archive/2007/10/24/json_in_aspnetajax_part2.aspx的一些脚本):
void Main()
{
GetLatestBlogs().Dump();
}
private readonly static string BlogServiceUrl =
"http://localhost:55671/BlogWebService.asmx/GetLatestBlogs?noBlogs={0}";
public static string GetLatestBlogs(int noBlogs = 5)
{
string formattedUri = String.Format(CultureInfo.InvariantCulture,
BlogServiceUrl, noBlogs);
HttpWebRequest webRequest = GetWebRequest(formattedUri);
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
string jsonResponse = string.Empty;
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
jsonResponse = sr.ReadToEnd();
}
return jsonResponse;
}
private static HttpWebRequest GetWebRequest(string formattedUri)
{
Uri serviceUri = new Uri(formattedUri, UriKind.Absolute);
return (HttpWebRequest)System.Net.WebRequest.Create(serviceUri);
}
我有很多问题/疑问:
- 应该如何格式化对 Web 服务的调用?我不确定 LinqPad 测试代码中 BlogServiceUrl 的构造是否正确。
- 我的 BlogWebService 类和 GetBlogs() 方法的定义和属性是否正确?
- 我是否需要在我的网站配置中添加任何内容才能使其正常工作?
任何建议将不胜感激。