我正在向现有网页添加ADO.Net数据服务查找功能.从visual studio运行时,一切都很好,但当我将它推出到IIS时,我收到以下错误:
请求错误
服务器在处理请求时遇到错误.请参阅服务器日志以获取更多详
即使在尝试显示默认页面时,我也会得到这个,即:
我在服务器上安装了3.5 SP1.
我错过了什么,它指的是"服务器日志"?我找不到任何进一步的错误消息.
事件查看器日志(系统或应用程序)中没有任何内容,除了GET之外的IIS日志中没有任何内容:
2008-09-10 15:20:19 10.7.131.71 GET /FFLookup.svc - 8082 - 10.7.131.86 Mozilla/5.0 +(Windows; + U; + Windows + NT + 5.1; + en-US)+ AppleWebKit/525.13 +(KHTML,+ like + Gecko)+ Chrome/0.2.149.29 + Safari/525.13 401 2 2148074254
没有返回堆栈跟踪.我得到的唯一回应是如上所述的"请求错误".
谢谢
帕特里克
创建RESTful WCF服务器有很多原因(很容易),如果你可以避免ASP及其安全框(如果你所做的只是返回信息的简单请求),那就更好了.请参阅:http://msdn.microsoft.com/en-us/library/ms750530.aspx了解如何执行此操作.
我发现处理AJAX(JQUERY)GET请求很容易.但是在POST中处理JSON很棘手.
以下是一个简单的GET请求合同的示例:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
String Version();
Run Code Online (Sandbox Code Playgroud)
实现就在这里(返回一个JSON)
public partial class CatalogService : ICatalogService
{
public String Version()
{
mon.IsActive = true;
this.BypassCrossDomain();
ViewModel.myself.TransactionCount++;
return ViewModel.myself.VersionString;
}
}
Run Code Online (Sandbox Code Playgroud)
啊,但如果你想发布一些JSON怎么办?你会发现很多关于堆栈溢出的文章告诉你所要做的就是:
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
BuildResponse BuildToby(BuildRequest request);
Run Code Online (Sandbox Code Playgroud)
它将接收JSON消息,反序列化为Plain .NET对象(PONO)并让您使用它.事实上,当我在Fiddler中构建请求时,这工作正常.
POST /BuildToby HTTP/1.1
User-Agent: Fiddler
Content-Type: application/json
Host: localhost:4326
Content-Length: 1999
Run Code Online (Sandbox Code Playgroud)
但是,当您在JQUERY 1.8中使用以下AJAX时,您会发现一个SURPRISE:
通过指定"application/json"的内容类型,您会发现有一个"预检"检查由浏览器触发,以查看您是否可以发布除了www-url-encloded post消息之外的其他内容.(堆栈中有关于此溢出的注释).
var request = JSON.stringify({ FrameList: ExportData.buildList });
var jqxhr = $.ajax({
type: …Run Code Online (Sandbox Code Playgroud) 保护WCF数据服务有哪些选择?服务的开放,RESTful特性是非常有益的,但我需要锁定这些服务,以便只有我的Silverlight和WPF应用程序可以执行针对这些服务的请求.该应用程序将公开发布,但我们的数据和数据模型不是免费供公众使用.
我们通过WCF数据服务公开域模型.该模型源自EF4,需要一些额外的工作才能使其成为通过Web服务发布所需的形式.
我想在EF4之外处理这个问题,以使我们的EDMX专注于模型,而不是它的用法.我的想法是创建一个专门用于Web服务的自定义"ServiceModel",并包含特定于服务的问题.
我的问题是如何在WCF数据服务中间最好地连接自动播放器.我正在使用WCF数据服务与ServiceModel的自定义(基于反射)提供程序.我在哪里可以将OData查询(对于ServiceModels)转换为EF4查询(对于DomainModels),并将结果映射回ServiceModels?
似乎有很多不同的数据访问策略来自微软.有'经典'ADO.NET,Linq2Sql,ADO.NET实体框架,ADO.NET数据服务,ADO.NET动态数据.我确定我错过了一些.对我来说,似乎存在很多关于每个框架适合应用程序架构的混淆.微软试图用所有这些数据访问方法解决什么问题?
好的,我们正在使用实体框架,并希望将这些实体的数据暴露给消费者.这些数据非常常见,虽然最初仅由WPF应用程序使用,但未来可能会被其他技术(如Silverlight,ASP.NET,Office等)使用.
通常,您将构建WCF服务,该服务公开了许多显式方法,以根据使用者的需求返回数据.例如,GetCustomersById(int Id),GetAllCustomers()等.如果您将来需要添加其他方法,这将导致必须重写WCF服务并处理版本问题的开销.您还可以使用DTO返回数据.
因此,我们正在考虑通过WCF数据服务公开实体.这似乎有道理.它通过消除必须构建实现各种接口的显式服务来节省开发工作.如果发生对实体的修改,它还可以保护您不必重写这些接口.
这一切似乎很容易,我相信我们错过了一些东西.这种方法有哪些缺点?此外,如果我们返回实体而不是DTO,我们还会失去什么?
然后有关于您可能还有的更新和删除操作的明显问题.是否值得为这些操作考虑WCF数据服务?
感谢您的任何见解!
我IUpdateable使用WCF 创建了一个ODATA源,我可以使用Excel 2010 Power Query连接到该源.Excel能够检索数据,但我无法找到"发布"按钮或无论如何告诉Excel将更新推送回服务器.
Excel/Power Query是否支持开箱即用的ODATA CRUD功能?
是否有其他工具可用于更新数据而无需编写代码?
我正在尝试使用WCF数据服务,并且我应该引用哪些库来与WCF数据服务进行交互:Microsoft.Data.Services.Client.dll或System.Data.Services.Client.dll.
他们之间有什么区别?在哪种情况下我应该使用它们?
当尝试添加对它们的引用时,我收到编译器错误:
类型'System.Data.Services.Client.DataServiceContext'存在于'e:\ Program Files\WCF Data Services Mar 2011 CTP2\bin.NETFramework\Microsoft.Data.Services.Client.dll'和'e:\ Program中Files\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Data.Services.Client.dll'
WCF数据服务和WCF Web API有什么区别?
有人可以比较和对比WCF Rest服务与ADO.NET数据服务吗?有什么区别以及何时使用哪个?
谢谢,
射线.
编辑:感谢第一个答案,只是为了给我一些关于我要做的事情的背景:我有一个我计划放入云端的Web应用程序(有一天),DAL是用ADO.NET Entity Framework构建的.而且,我需要确定哪种Web服务数据访问技术最适合我的情况.
wcf ×5
.net ×3
ado.net ×1
automapper ×1
c# ×1
dll ×1
excel ×1
http-post ×1
iis ×1
jquery ×1
linq-to-sql ×1
odata ×1
powerquery ×1
rest ×1
soa ×1
web-services ×1