Я новичок в WCF.
Я написал следующую службу ниже, которая работает нормально.Затем я настроил IIS и запустил службу через браузер http://localhost/WCF_Entity_SVC/ProductService.svc,, который работает нормально.Я создал веб-страницу ASP.Net и добавил ссылку на службу с помощью URL.Когда я запускаю страницу ASP, я получаю внутреннюю ошибку.Любая помощь приветствуется.
public class ProductService : IProductService
{
public Product GetProduct(int id)
{
NorthwindEntities context = new NorthwindEntities();
var productEntity = (from p
in context.ProductEntities
where p.ProductID == id
select p).FirstOrDefault();
if (productEntity != null)
return TranslateProductEntityToProduct(productEntity);
else
throw new Exception("Invalid product id");
}
private Product TranslateProductEntityToProduct(
ProductEntity productEntity)
{
Product product = new Product();
product.ProductID = productEntity.ProductID;
product.ProductName = productEntity.ProductName;
product.QuantityPerUnit = productEntity.QuantityPerUnit;
product.UnitPrice = (decimal)productEntity.UnitPrice;
product.Discontinued = productEntity.Discontinued;
return product;
}
}
ASP-код
public partial class _Default : System.Web.UI.Page
{
myService.ProductServiceClient objService = new ProductServiceClient();
protected void Page_Load(object sender, EventArgs e)
{
var results = objService.GetProduct(45); //debug shows internal error
dgResult.DataSource = results;
dgResult.DataBind();
}
}
Добавление отладки к веб-конфигурации показывает следующую ошибку:
The underlying provider failed on Open.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]: The underlying provider failed on Open.
Source Error:
Line 159:
Line 160: public ASPWFC.myService.Product GetProduct(int id) {
Line 161: return base.Channel.GetProduct(id);
Line 162: }
Line 163: }
Source File: D:\My Documents\Visual Studio 2010\Projects\wcf\WCF_Entity\ASPWFC\Service References\myService\Reference.cs Line: 161
Stack Trace:
[FaultException`1: The underlying provider failed on Open.]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +9464367
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +345
ASPWFC.myService.IProductService.GetProduct(Int32 id) +0
ASPWFC.myService.ProductServiceClient.GetProduct(Int32 id) in D:\My Documents\Visual Studio 2010\Projects\wcf\WCF_Entity\ASPWFC\Service References\myService\Reference.cs:161
ASPWFC._Default.Page_Load(Object sender, EventArgs e) in D:\My Documents\Visual Studio 2010\Projects\wcf\WCF_Entity\ASPWFC\Default.aspx.cs:23
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +37
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +95
System.Web.UI.Control.OnLoad(EventArgs e) +145
System.Web.UI.Control.LoadRecursive() +134
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3412
Для целей отладки я добавляюфункция, называемая Getparams (int id) для службы, выполняет только функцию, возвращающую идентификатор.Я вызвал функции Getparams на странице ASp и получил пропущенный аргумент.Я думаю, это означает, что параметр в функции GetProduct передается службе, и где-то в ссылке на запрос сущности возникает ошибка.
Что я не понимаю, так это почему, когда я запускаю службу напрямуюНет ошибки.База данных дает мне результат
Я сделал еще одну отладку и обнаружил причину ошибки открытия:
sqlError: Ошибка входа в IIS AppPool \ ASP.Net4
Как мне исправить это, мой sqlserver запускается через проверку подлинности Windows.
Я нашел скрипт в msdn, который исправляет проблему безопасности, и код работает, как известно
CREATE LOGIN [IIS APPPOOL\ASP.NET v4.0]
FROM WINDOWS WITH DEFAULT_DATABASE=[Northwind],
DEFAULT_LANGUAGE=[us_english]
GO
CREATE USER [NWUser]
FOR LOGIN [IIS APPPOOL\ASP.NET v4.0]
GO
EXEC sp_addrolemember 'db_datareader', 'NWUser'
GO