[英]How do I properly host a WCF Data Service that connects to SQLServer in IIS? Why am I getting errors?
我正在玩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, ...
在我看来,这是一个SQL身份验证错误,IIS正在一个无法访问您的SQL服务器的用户下运行其appPool,当您在Visual Studio(本地)中毁了它将是一个不同的用户。 检查用户服务器上的IIS正在使用的用户,并确保它有权在SQL中执行您想要的操作。
尝试将连接字符串属性集成安全性更改为False
使用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地址。 单击Go。
将发现并显示WCF项目中服务的第二个绑定。 单击确定。
使用开发计算机的IP地址的新服务引用将添加到Windows Phone项目中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.