WCF-在ASP.NET应用程序中有多个.svc服务



我在Visual Studio 2010中创建了一个C#/ASP.NET应用程序,并在其中创建了service.svc文件和相应的

  • IService.cs//合同
  • Service.cs//合同接口的执行

并且此WCF服务以JSON形式返回我的数据。我用jQueryajax帖子做到了。这项服务似乎按我的意愿运行,但后来我决定添加第二项服务,即ServiceNew.svc及其相应的

  • IServiceNew.cs//合同
  • ServiceNew.cs//合同接口的执行

并在web.config中添加相应的端点。

在我添加了第二个WCF服务之后,所有服务都不起作用,它返回了一个500内部服务器错误。

最奇怪的是,如果我从应用程序的文件夹中删除所有新文件ServiceNew.svcIServiceNew.csServiceNew.cs,那么当我像以前一样用jQuery帖子点击它们时,第一个Service.svc就工作了,然后,如果我只是简单地将这些文件再次复制回我的文件夹并运行Visual Studio主机,那么我的两个服务(旧的和新的)都会随机工作一段时间,然后当我用jQuery ajax调用它们时,它们再次突然返回500错误。

我的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,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null"或其依赖项之一。系统找不到指定的文件。]System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+0System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+39System.Reflection.RuntimeAssembly.InteralLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark和stackMark,用于Introspection的布尔值,布尔值suppressSecurityChecks)+132System.Reflection.RuntimeAssembly.InteralLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark&stackMark,用于Introspection的布尔值)+144System.Reflection.Assembly.Load(字符串assemblyString)+28System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString,Uri[]baseAddresses)+210System.ServiceModel.HostingManager.CreateService(字符串规范化虚拟路径)+1461System.ServiceModel.HostingManager.ActivateService(字符串规范化虚拟路径)+44System.ServiceModel.HostingManager.EnsureServiceAvailable(字符串规范化虚拟路径)+651

[ServiceActivationException:由于编译期间出现异常,无法激活服务"/ServiceNew.svc"。异常消息为:无法加载文件或程序集"App_Web_oq2tdtg4,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null"或其依赖项之一。系统找不到指定的文件。]System.Runtime.AncResult.End(IAsyncResult结果)+687598System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult结果)+190System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication上下文,String routeServiceVirtualPath,Boolean flowContext,Boolean ensureWFService)+234System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext上下文)+24System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+100System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,Boolean和completedSynchronously)+75

组件加载跟踪:

以下信息有助于确定无法加载程序集"App_Web_oq2tdtg4,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null"的原因。

===预绑定状态信息===日志:用户=ZULUTRADE\stasis日志:DisplayName=App_Web_oq2tdtg4,版本=0.0.0.0,区域性=中性,PublicKeyToken=null(详细说明)日志:Appbase=file:///C:/Users/stassis/Documents/Development/theDreamBox/日志:Initial PrivatePath=C:\Users\stassis\Documents\Development\theDreamBox\bin

正在调用程序集:(未知)

日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:C:\Users\stassis\Documents\Development\theDreamBox\web.config日志:使用主机配置文件:日志:使用C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config中的计算机配置文件。日志:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。日志:正在尝试下载新URLfile:///C:/Users/stassis/AppData/Local/Temp/TemporaryASP.NET文件/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4.DLL。日志:正在尝试下载新URLfile:///C:/Users/stassis/AppData/Local/Temp/TemporaryASP.NET文件/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4/App_Web_Oq2tdtg 4.DLL。日志:正在尝试下载新URLfile:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4.DLL.日志:正在尝试下载新URLfile:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4/App_Web_oq2tdtg4.DLL.日志:正在尝试下载新URLfile:///C:/Users/stassis/AppData/Local/Temp/TemporaryASP.NET文件/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4.EXE。日志:正在尝试下载新URLfile:///C:/Users/stassis/AppData/Local/Temp/TemporaryASP.NET文件/root/87ef3319/ec80b2f5/App_Web_oq2tdtg4/App_Web_Oq2tdtg 4.EXE。日志:正在尝试下载新URLfile:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4.EXE.日志:正在尝试下载新URLfile:///C:/Users/stassis/Documents/Development/theDreamBox/bin/App_Web_oq2tdtg4/App_Web_oq2tdtg4.EXE.

我不太确定,但您将两个服务绑定到同一地址,可能您已经更改了每个服务实现的端点地址

<services>
<service behaviorConfiguration="ServiceBehavior" name="Service">
<endpoint address="a" binding="webHttpBinding"
contract="IService" behaviorConfiguration="EndpBehavior"/>
</service>
<service behaviorConfiguration="ServiceBehavior" name="ServiceNew">
<endpoint address="b" binding="webHttpBinding"
contract="IServiceNew" behaviorConfiguration="EndpBehavior"/>
</service>

有一个错误导致您观察到的类似行为。我不知道这是否是确切的问题,但你可以查看这个支持页面。

几天前我的服务也遇到了同样的问题

问题是我不能在一个.config文件中为实现提供服务。

当我托管该服务时,我必须为ServiceHost提供一种实现类型——但由于在配置文件中定义了tow,它不断抛出错误。

我的解决方案是从配置中添加一个服务,并在C#中添加另一个(到不同的ServiceHost)

最新更新