我在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
,当我点击时,第一个Service.svc
正常工作他们像以前一样使用jQuery帖子,然后如果我只是将这些文件再次复制回我的文件夹并运行Visual Studio主机,那么我的服务(旧的和新的)的两个工作随机一段时间,然后他们再次突然返回500当我用jQuery 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,显示以下异常:
无法加载文件或程序集&#39; App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。系统找不到指定的文件。
堆栈追踪:
[FileNotFoundException:无法加载文件或程序集&#39; App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。该系统找不到指定的文件。] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+0 System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+39 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark&amp; stackMark,Boolean forIntrospection,Boolean suppressSecurityChecks)+132 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString,Evidence assemblySecurity,StackCrawlMark&amp; stackMark,Boolean forIntrospection)+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:服务&#39; /ServiceNew.svc'由于编译期间的异常,无法激活。异常消息是:无法加载文件或程序集&#39; App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null&#39;或其中一个依赖项。该系统找不到指定的文件..] 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.Execute()+100 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+75
装配加载跟踪:
以下信息有助于确定程序集“App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null&#39;无法加载。
===预绑定状态信息=== 日志:用户= ZULUTRADE \ stassis 日志:DisplayName = App_Web_oq2tdtg4,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null (完全指定的) 日志:Appbase = file:/// C:/ Users / stassis / Documents / Development / theDreamBox / 日志:初始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中的计算机配置文件。 日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定)。 日志:尝试下载新的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 :(得分: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>
答案 1 :(得分:1)
有一个错误会导致您观察到类似的行为。我不知道这是否是确切的问题,但您可以查看this support page。
答案 2 :(得分:1)
几天前我的服务遇到了同样的问题See here
问题是我无法在一个.config文件中实现服务实现。
当我托管服务时,我必须给ServiceHost
一种类型的实现 - 但是由于在配置文件中定义了tow,它会不断抛出错误。
我的解决方案是从配置中添加一个服务,然后在C#中添加另一个服务(到另一个ServiceHost
)