我正在玩WCF数据服务(ADO.NET数据服务)。我有一个指向AdventureWorks数据库的实体框架模型。
当我在Visual Studio中调试我的svc文件时,效果很好。我可以说/awservice.svc/Customers并取回我期望的ATOM提要。
如果我将服务(托管在ASP.NET Web应用程序中)发布到IIS7,则相同的查询字符串将返回500错误。根svc页面本身按预期工作并成功返回ATOM。 / Customers路径失败。
以下是我在svc文件中的授权内容:
public class AWService : DataService<AWEntities>
{
public static void InitializeService( DataServiceConfiguration config )
{
config.SetEntitySetAccessRule( "*", EntitySetRights.All );
config.SetServiceOperationAccessRule( "*", ServiceOperationRights.All );
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
更新:我启用了详细错误并在XML消息中获取以下内容:
<innererror>
<message>The underlying provider failed on Open.</message>
<type>System.Data.EntityException</type>
<stacktrace>
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(
...
...
<internalexception>
<message>
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
</message>
<type>System.Data.SqlClient.SqlException</type>
<stacktrace>
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, ...
答案 0 :(得分:8)
在我看来,这是一个SQL身份验证错误,IIS在无法访问SQL服务器的用户下运行其appPool,当您在Visual Studio(本地)中破坏时,它将是另一个用户。检查用户服务器上的IIS是否正在使用,并确保它有权在SQL中执行您想要的操作。
答案 1 :(得分:1)
尝试将连接字符串属性集成安全性更改为错误
答案 2 :(得分:0)
使用IIS Express快速解决方案
创建防火墙例外,以允许通过IIS Express正在使用的端口上的防火墙发出HTTP请求。
如有必要,运行ipconfig获取开发计算机的IP地址。
在%USERPROFILE%\ Documents \ IISExpress \ config文件夹中找到IIS Express配置文件applicationhost.config。 USERPROFILE环境变量的值通常为C:\ Users \。
使用记事本或其他文本编辑器打开applicationhost.config并进行以下更改。
查找Web服务的网站元素WebServiceForTesting。 如果您没有看到Web服务的site元素,则必须至少部署该服务一次才能创建该元素。
在site元素的bindings部分中,复制绑定元素并将副本直接粘贴到现有绑定元素下方以创建第二个绑定。 在新绑定元素中,将localhost替换为计算机的IP地址。 保存更改。
以管理员身份运行Visual Studio并打开Visual Studio解决方案。
在手机应用程序项目中,如果您之前已添加该服务,请删除该服务的服务引用。 向重新配置的Web服务添加新的服务引用。在“添加服务引用”对话框的“地址”框中,将localhost替换为开发计算机的IP地址。单击“开始”。
发现并显示WCF项目中服务的第二个绑定。单击“确定”。
使用开发计算机IP地址的新服务引用已添加到Windows Phone项目中。