500- Web服务的内部错误

时间:2012-04-24 20:32:42

标签: asp.net web-services iis-7.5

我刚刚从共享主机切换到GoDaddy上的vps。我有一个在共享主机上运行良好的web服务。我试图让它在我的vps下工作。转到链接时,我不断收到500内部错误。

我确实将其设置为IIS中的应用程序,并使用集成管道创建了自己的应用程序池。

关于还有什么可能导致此问题的任何想法?

编辑1: 如果我将我的应用程序池切换为使用与我的站点相同的应用程序池,我会收到此错误: “解析器错误 说明:解析为此请求提供服务所需的资源时发生错误。请查看以下特定的解析错误详细信息并适当修改源文件。

分析程序错误消息:该页面必须具有<%@ webservice class =“MyNamespace.MyClass”...%>指令。

来源错误:

第1行:这是预编译工具生成的标记文件,不应删除!

源文件:/webservices/namesearch.asmx行:1“

这是我的web.config

<?xml version="1.0"?>
<configuration>
  <appSettings/>
  <connectionStrings/>
  <system.web>


 <compilation debug="true" targetFramework="4.0"/>
<!--
  The <authentication> section enables configuration 
  of the security authentication mode used by 
  ASP.NET to identify an incoming user. 
-->
    <authentication mode="Windows"/>
      <customErrors mode="Off"/>

      <!--
       The <customErrors> section enables configuration 
       of what to do if/when an unhandled error occurs 
       during the execution of a request. Specifically, 
       it enables developers to configure html error pages 
       to be displayed in place of a error stack trace.

       <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
         <error statusCode="403" redirect="NoAccess.htm" />
         <error statusCode="404" redirect="FileNotFound.htm" />
       </customErrors>
    -->
    <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID"/>
  </system.web>
  <!-- 
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
</configuration>

编辑2: 所以我注意到解析器错误,它也说“源错误:

第1行:这是预编译工具生成的标记文件,不应删除!“

所以我试着在webservice上做一个预编译。当我这样做时,我得到错误说“使用注册为allowDefinition ='machinetoapplication'的部分超出应用程序级别是错误的。这个错误可能是由于虚拟目录没有被配置为iis中的应用程序”

2 个答案:

答案 0 :(得分:2)

我刚使用SoapClient来点击your web service。它允许我们快速supply arguments to your web service

怀疑您的错误在NameSearch.asmx.cs:line 29,您可能正在尝试编写或读取事件日志(特别是安全日志)。可能EventLog.WriteEntry()

这里的问题是,在幕后,如果没有适当的授权,您的通话会尝试VerifyAndCreateSource()

要解决此问题,请为安全事件日志授予适当的权限。可能运行的用户上下文在NetworkService下。

考虑实施IIS7: Web Application writing to Event Log generates Security Exception中的步骤。这里的主要想法是允许网络服务,或运行您的应用程序的任何安全上下文,写入注册表项的权限

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog

enter image description here

.NET代码中抛出的完整错误是:

  

System.Web.Services.Protocols.SoapException:服务器无法处理请求。 ---&GT; System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。要创建源,您需要具有读取所有事件日志的权限,以确保新源名称是唯一的。无法访问的日志:安全性。 at System.Diagnostics.EventLogInternal.FindSourceRegistration(String source,String machineName,Boolean readOnly,Boolean wantToCreate)at System.Diagnostics.EventLogInternal.SourceExists(String source,String machineName,Boolean wantToCreate)at System.Diagnostics.EventLogInternal.VerifyAndCreateSource(String sourceName) ,System.Diagnostics.EventLogInternal.WriteEntry(String message,EventLogEntryType type,Int32 eventID,Int16 category,Byte [] rawData),位于System.Diagnostics.EventLog.WriteEntry(String message),位于WebServices.NameSearch.GetSearchResult处(字符串currentMachineName) prefixText,Int32 count)在C:\ Users \ xufurisa \ Dropbox \ Programs \ PoliticProfiles \ WebServices \ NameSearch.asmx.cs:第29行

答案 1 :(得分:0)

要确定代码中您的错误发生在哪里,请编辑您的web.config以包含:

<system.web>
    <customErrors mode="Off"/>
</system.web>