2013-02-12 28 views
3

我已经在Visual Studio 2010中的C#/ ASP.NET应用程序中创建,并在一个service.svc文件和相应的WCF - 在ASP.NET应用程序中多个.SVC服务

  • IService.cs//合同
  • Service.cs //合同的实施 - 接口

,这WCF服务JSON返回我的数据。我用jQuery ajax发布了它。这项服务似乎工作,因为我想它,但后来我决定与它对应的

  • IServiceNew.cs //合同
  • 合同ServiceNew.cs //实现即添加第二个服务ServiceNew.svc - 接口

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

在我添加第二个WCF服务后,没有任何服务工作,它返回了500内部服务器错误。

最奇怪的是,如果我从我的应用程序的文件夹中删除所有的新文件ServiceNew.svcIServiceNew.csServiceNew.cs第一Service.svc作品时,我像以前一样用jQuery的帖子打他们,然后,如果我只是复制这些文件再回到我的文件夹并运行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有问题吗?

是别的吗?

感谢

UPDATE:

作为一个更新,我可以说,当我尝试调试.SVC文件中的一个,比方说在浏览器中显示以下异常ServiceNew.svc :

无法加载文件或程序集'App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其某个依赖项。该系统找不到指定的文件。

堆栈跟踪:

[FileNotFoundException异常:未能加载文件或程序集 'App_Web_oq2tdtg4,版本= 0.0.0.0,文化=中性公钥=空' 或它的一个依赖。系统无法找到指定的文件。] 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文件名,字符串的代码库,证据assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark & stackMark,布尔throwOnFileNotFound,布尔forIntrospection,布尔suppressSecurityChecks)39 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,证据assemblySecurity,StackCrawlMark & stackMark, Boolean forIntrospection,Boolean suppressSecurityChecks)+132 System.Reflection.Ru ntimeAssembly.InternalLoad(字符串assemblyString,证据assemblySecurity,StackCrawlMark & stackMark,布尔forIntrospection)144 System.Reflection.Assembly.Load(字符串assemblyString)28 System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(字符串constructorString,乌里[] baseAddresses)210 System.ServiceModel.HostingManager.CreateService(字符串normalizedVirtualPath)1461 System.ServiceModel.HostingManager.ActivateService(字符串normalizedVirtualPath)44 System.ServiceModel.HostingManager.EnsureServiceAvailable(字符串normalizedVirtualPath)651

[ServiceActivationException:由于com中的异常,无法激活服务'/ServiceNew.svc' pilation。异常消息是:无法加载文件或程序集'App_Web_oq2tdtg4,版本= 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 context,String routeServiceVirtualPath,Boolean flowContext,Boolean ensureWFService)+234 System.ServiceModel.Activation.HttpHandler.ProcessRequest(HttpContext context)+24 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+ 100 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,布尔型& completedSynchronously)+75

程序集加载跟踪:

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

===预绑定状态信息=== LOG:用户= ZULUTRADE \ stassis LOG:DisplayName的= App_Web_oq2tdtg4,版本= 0.0.0.0,文化=中性公钥=空 (完全指定) 日志: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。

+0

可以检查WSDL文件被正确发布当您尝试使用Web浏览器来称呼他们? – daryal 2013-02-12 12:57:33

+0

你在开发机器上运行它吗?事件日志是否会提供更多信息?你从服务中返回的数据集有多大? – Jocke 2013-02-12 13:41:23

+0

是的,我在我的开发机器上运行它。我会更新我的文章,并写下我认为你想要的日志。这个日志在异常中提到,当我在调试模式下运行我的ServiceNew.svc文件时,在浏览器中显示的是什么 – Redg 2013-02-12 13:48:15

回答

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> 
+0

我已经尝试过你刚才所说的地址,但它也会抛出相同的错误 ,同样的例外是在Debug(F5)中运行ServiceNew.svc时引发 – Redg 2013-02-12 13:19:34

1

没有导致类似的行为你是一个bug观察。我不知道这是否是确切的问题,但您可以检查this support page

1

我有同样的问题,我的服务几天就回来See here

的问题是,我可以不必服务实现诠释一个config文件。

当我托管服务时,我不得不给ServiceHost一种类型的实现 - 但由于在配置文件中定义了拖拽,所以不断抛出错误。

我的解决办法是从配置在C#中添加一个服务,并添加其他(到不同的ServiceHost

相关问题