3

我在 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,当我像以前一样使用 jQuery 帖子点击它们时IServiceNew.csServiceNew.cs第一个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,版本=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, Evidence assemblySecurity,

[ServiceActivationException:服务“/ServiceNew.svc”由于编译过程中的异常而无法激活。异常消息是:无法加载文件或程序集 'App_Web_oq2tdtg4,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一。系统找不到指定的文件..] System.Runtime.AsyncResult.End(IAsyncResult result) +687598 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +190 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context , String routeServiceVirtualPath, Boolean flowContext, Boolean ensureWFService) +234 System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext context) +24 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep。

装配负载跟踪:

以下信息有助于确定为什么无法加载程序集“App_Web_oq2tdtg4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”。

=== 预绑定状态信息 === LOG: User = ZULUTRADE\stassis LOG: DisplayName = App_Web_oq2tdtg4, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null (完全指定) LOG: Appbase = file:// /C:/Users/stassis/Documents/Development/theDreamBox/ LOG: Initial 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。正在尝试下载新的 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。正在尝试下载新的 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。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。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。

4

3 回答 3

2

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

<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>
于 2013-02-12T12:55:32.330 回答
1

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

于 2013-02-12T13:21:28.970 回答
1

几天前我的服务遇到了同样的问题,请参见此处

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

当我托管服务时,我必须给出实现ServiceHost的类型 - 但由于在配置文件中定义了 tow,它不断抛出错误。

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

于 2013-02-12T13:27:23.633 回答