【发布时间】:2013-01-27 18:46:11
【问题描述】:
我在 Visual Studio 2010 中创建了一个 C#/ASP.NET 应用程序,并在其中创建了一个 service.svc 文件和相应的
-
IService.cs//合约 -
Service.cs//合约的实现-接口
这个 WCF 服务以 JSON 格式返回我的数据。我用 jQuery ajax 帖子击中了它。该服务似乎可以按我的意愿工作,但后来我决定添加第二个服务,即ServiceNew.svc 及其对应的
-
IServiceNew.cs//合约 -
ServiceNew.cs//合约的实现-接口
并在web.config中添加相应的端点。
在我添加第二个 WCF 服务后,没有任何服务运行,它返回 500 内部服务器错误。
最奇怪的部分是,如果我从应用程序的文件夹中删除所有新文件 ServiceNew.svc、IServiceNew.cs、ServiceNew.cs,当我像以前一样使用 jQuery 帖子点击它们时,第一个 Service.svc 会起作用,并且然后,如果我只是将这些文件再次复制回我的文件夹并运行 Visual Studio 主机,那么我的两个服务(旧的和新的)都会随机工作一段时间,然后当我用 jQuery 击中它们时它们再次突然返回 500 错误ajax 调用。
我的web.config 是:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="EndpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Service">
<endpoint address="" binding="webHttpBinding"
contract="IService" behaviorConfiguration="EndpBehavior"/>
</service>
<service behaviorConfiguration="ServiceBehavior" name="ServiceNew">
<endpoint address="" binding="webHttpBinding"
contract="IServiceNew" behaviorConfiguration="EndpBehavior"/>
</service>
</services>
</system.serviceModel>
IService.cs:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "d")]
MovieInfo GetMovieInfo(string title, string year);
}
Service.cs:
[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
public class Service: IService
{
public MovieInfo GetMovieInfo(string title, string year)
{
...
return MovieInfo();
}
}
同样
IServiceNew.cs:
[ServiceContract]
public interface IServiceNew
{
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "d")]
string GetConf();
}
ServiceNew.cs:
[AspNetCompatibilityRequirements(RequirementsMode
= AspNetCompatibilityRequirementsMode.Allowed)]
public class ServiceNew: IServiceNew
{
public string GetConf()
{
...
return conf;
}
}
谁能告诉我我做错了什么?如何在 ASP.NET 应用程序中添加多个 WCF 服务( .svc 文件),以便通过 jQuery ajax 调用来访问它们?
我的web.config 有问题吗?
还有别的吗?
谢谢
更新:
作为更新,我可以说,当我尝试调试其中一个 .svc 文件时,假设浏览器中的 ServiceNew.svc 会显示以下异常:
无法加载文件或程序集“App_Web_oq2tdtg4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。
堆栈跟踪:
[FileNotFoundException:无法加载文件或程序集“App_Web_oq2tdtg4,版本=0.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +39 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection,Boolean suppressSecurityChecks)+132 System.Reflection.RuntimeAssembly.InternalLoad(字符串 assemblyString,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection)+144 System.Reflection.Assembly.Load(String assemblyString) +28 System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +210 System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +1461 System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +44 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +651
[ServiceActivationException:服务'/ServiceNew.svc'由于编译过程中的异常而无法激活。异常消息是:无法加载文件或程序集 'App_Web_oq2tdtg4,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。该系统找不到指定的文件..] System.Runtime.AsyncResult.End(IAsyncResult 结果) +687598 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult 结果) +190 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication 上下文,字符串 routeServiceVirtualPath,布尔流上下文,布尔确保WFService)+234 System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext 上下文)+24 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +100 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
装配负载跟踪:
以下信息有助于确定为什么无法加载程序集“App_Web_oq2tdtg4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”。
=== 预绑定状态信息 === 日志:用户 = ZULUTRADE\stassis 日志:DisplayName = App_Web_oq2tdtg4,版本=0.0.0.0,文化=中性,PublicKeyToken=null (完全指定) 日志:Appbase = file:///C:/Users/stassis/Documents/Development/theDreamBox/ LOG:初始 PrivatePath = C:\Users\stassis\Documents\Development\theDreamBox\bin
调用程序集:(未知)。
LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:C:\Users\stassis\Documents\Development\theDreamBox\web.config LOG:使用主机配置文件: LOG:使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 中的机器配置文件。 LOG:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/AppData/Local/Temp/Temporary ASP.NET Files/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4.DLL。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/AppData/Local/Temp/Temporary ASP.NET Files/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4/App_Web_oq2tdtg4.DLL。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4.DLL。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4/App_Web_oq2tdtg4.DLL。 日志:尝试下载新的 URL 文件:///C:/Users/stassis/AppData/Local/Temp/Temporary ASP.NET Files/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4.EXE。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/AppData/Local/Temp/Temporary ASP.NET Files/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4/App_Web_oq2tdtg4.EXE。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4.EXE。 日志:正在尝试下载新的 URL 文件:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4/App_Web_oq2tdtg4.EXE。
【问题讨论】:
-
当您尝试使用网络浏览器调用 wsdl 文件时,您能否检查它们是否正确发布?
-
你是在你的开发机器上运行它吗?事件日志是否为您提供更多信息?您从服务返回的数据集有多大?
-
是的,我在我的开发机器上运行它。我会更新我的帖子并写下我认为你想要的日志。当我在调试模式下运行我的 ServiceNew.svc 文件时,在异常中以及在浏览器中显示的内容中提到了此日志
-
抱歉,我无法发现错误,所以我会继续提问:您使用哪些设置用于指定引用的程序集中的重用类型? msdn.microsoft.com/en-us/library/bb628653(v=vs.100).aspx
标签: c# asp.net wcf jquery wcf-binding