gpt4 book ai didi

.net - 在 IIS 7.0 上访问 .asmx 页面时出现 "Could not create type XXXX"

转载 作者:行者123 更新时间:2023-12-03 14:42:42 25 4
gpt4 key购买 nike

当我尝试在我的 Web 浏览器上访问 .asmx 文件时出现此错误消息。消息如下:

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Could not create type 'GeocachingServerNS.GeocachingServer'.

Source Error:

Line 1: <%@ WebService Language="C#" CodeBehind="GeocachingServer.asmx.cs" Class="GeocachingServerNS.GeocachingServer" %>



这是我的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;

namespace GeocachingServerNS
{
public class PlayerInfo
{
public string playerName;
public Position position;

public PlayerInfo()
{
}

public PlayerInfo(string playerName, Position position)
{
this.playerName = playerName;
this.position = position;
}
}

public class CacheInfo
{
public string cacheName;
public string creatorName;
public int id;
public Position position;
public string hint;
public string code;

public CacheInfo()
{
}

public CacheInfo(string cacheName, string creatorName, int id, Position position, string hint, string code)
{
this.cacheName = cacheName;
this.creatorName = creatorName;
this.id = id;
this.position = position;
this.hint = hint;
this.code = code;
}
}

public class Position
{
public double latitude;
public double longitude;

public Position()
{
}
}

public class Message
{
public string sender;
public string content;

public Message()
{
}
}

[WebService(Namespace = "http://ift604.usherbrooke.ca/", Name = "GeocachingServer")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class GeocachingServer : System.Web.Services.WebService
{
public static int m_idCounter = 0;
public static List<CacheInfo> m_cacheInfos = new List<CacheInfo>();
public static List<PlayerInfo> m_playerInfos = new List<PlayerInfo>();
public static Dictionary<CacheInfo, List<Message>> m_cacheComments = new Dictionary<CacheInfo, List<Message>>();
public static Dictionary<string, List<Message>> m_mailboxes = new Dictionary<string, List<Message>>();

/// <summary>
/// Registers a new cache into the geocaching server.
/// The cache will be visible to players.
/// </summary>
/// <param name="cacheName"></param>
/// <param name="creatorName"></param>
/// <param name="position"></param>
/// <param name="hint"></param>
[WebMethod]
public void RegisterCache(string cacheName, string creatorName, Position position, string hint, string code)
{
CacheInfo cacheInfo = new CacheInfo(cacheName, creatorName, m_idCounter, position, hint, code);
m_cacheInfos.Add(cacheInfo);
m_cacheComments[cacheInfo] = new List<Message>();

++m_idCounter;
}

/// <summary>
/// Sends (updates) the position of a player to the geocaching server.
/// </summary>
/// <param name="position"></param>
/// <param name="playerName"></param>
[WebMethod]
public void SendPosition(Position position, string playerName)
{
PlayerInfo playerInfo = FindPlayer(playerName);
if (playerInfo == null)
{
//TODO: Est-ce la meilleure façon de procéder, d'un point de vue
//sécurité (flooding)? Non.
m_playerInfos.Add(new PlayerInfo(playerName, position));
}
else
{
playerInfo.position = position;
}
}

/// <summary>
/// Removes a player from the geocaching game.
/// </summary>
/// <param name="playerName"></param>
[WebMethod]
public void Disconnect(string playerName)
{
PlayerInfo playerInfo = FindPlayer(playerName);
m_playerInfos.Remove(playerInfo); //Fonctionne aussi avec null.
}

/// <summary>
/// Returns positions of players nearby.
/// </summary>
/// <param name="playerName">The player that requests the positions.</param>
/// <returns></returns>
[WebMethod]
public List<PlayerInfo> GetPlayerPositions(String playerName)
{
//TODO: Retourner la position des joueurs qui sont près du joueur...
return m_playerInfos;
}

/// <summary>
/// Returns the list of all caches that exists in the server.
/// </summary>
/// <returns></returns>
[WebMethod]
public List<CacheInfo> GetCacheList()
{
return m_cacheInfos;
}

/// <summary>
/// Returns all comments related to a cache.
/// </summary>
/// <param name="cacheId"></param>
/// <returns></returns>
[WebMethod]
public List<Message> GetComments(int cacheId)
{
List<Message> comments = new List<Message>();

CacheInfo cacheInfo = FindCache(cacheId);
if (cacheInfo != null)
{
comments = m_cacheComments[cacheInfo];
}

return comments;
}

/// <summary>
/// Sends a contragulations message to the creator
/// of a cache.
/// </summary>
/// <param name="message"></param>
/// <param name="cacheId"></param>
[WebMethod]
public void SendMessage(Message message, int cacheId)
{
CacheInfo cacheInfo = FindCache(cacheId);

if (!m_mailboxes.ContainsKey(cacheInfo.creatorName))
{
m_mailboxes[cacheInfo.creatorName] = new List<Message>();
}

m_mailboxes[cacheInfo.creatorName].Add(message);
}

/// <summary>
/// Returns all messages sent to a player (like
/// congratulations messages).
/// </summary>
/// <param name="playerName"></param>
/// <returns></returns>
[WebMethod]
public List<Message> GetMessages(String playerName)
{
if (!m_mailboxes.ContainsKey(playerName))
{
m_mailboxes[playerName] = new List<Message>();
}

return m_mailboxes[playerName];
}

/// <summary>
/// Adds a comment to a cache.
/// </summary>
/// <param name="message"></param>
/// <param name="cacheId"></param>
[WebMethod]
public void AddComment(Message message, int cacheId)
{
CacheInfo cacheInfo = FindCache(cacheId);
if (cacheInfo != null)
{
m_cacheComments[cacheInfo].Add(message);
}
}

private PlayerInfo FindPlayer(string playerName)
{
foreach (PlayerInfo info in m_playerInfos)
{
if (info.playerName == playerName)
{
return info;
}
}

return null;
}

private CacheInfo FindCache(int id)
{
foreach (CacheInfo info in m_cacheInfos)
{
if (info.id == id)
{
return info;
}
}

return null;
}
}
}

我在 IIS 管理器的“默认网站”上创建了一个虚拟文件夹。我使用 IIS 7.0 和 Windows Server 2008。

我看了十分之一的论坛,他们都这么说:
  • IIS 7.0
  • 可能有问题
  • .asmx 文件中类属性的命名空间不好(在我的情况下是)
  • 如果包含 Web 服务的类名是 Service,那么它可能不起作用(错误)
  • .asmx 的构建操作文件必须是 Content (它是)。
  • .asmx.cs 的构建操作文件必须是编译(它是)。
  • 代码必须在 App_Code 中“虚拟目录”中的目录和 .asmx文件必须在 CodeBehind 属性中包含正确的文件(我试过了,但没有用)。

  • 这是目录结构
    - App_Data
    - bin
    - GeocachingServer.asmx
    - GeocachingServer.asmx.cs
    - GeocachingServer.dll
    - GeocachingServer.pdb
    - obj
    - Debug
    - Refactor
    - TempPE
    - GeocachingServer.dll
    - GeocachingServer.pdb
    - Server.csproj.FileListAbsolute.txt
    - Properties
    - AssemblyInfo.cs
    - Example09ServiceWeb.Publish.xml
    - GeocachingServer.asmx
    - GeocachingServer.asmx.cs
    - Server.csproj
    - Server.csproj.user
    - Server.Publish.xml
    - Web.config
    - x.html (if I ask this file when specifying the URL, it works)

    这是我的 web.config 文件:
    <?xml version="1.0"?>
    <configuration>
    <configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/></sectionGroup></sectionGroup></sectionGroup></configSections><appSettings/>
    <connectionStrings/>
    <system.web>
    <!--
    Définissez compilation debug="true" pour insérer des symboles
    de débogage dans la page compilée. Comme ceci
    affecte les performances, définissez cette valeur à true uniquement
    lors du développement.
    -->
    <customErrors mode="Off"/>
    <compilation debug="true">
    <assemblies>
    <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies></compilation>
    <!--
    La section <authentication> permet la configuration
    du mode d'authentification de sécurité utilisé par
    ASP.NET pour identifier un utilisateur entrant.
    -->
    <!--authentication mode="Windows"/>
    -->
    <!--
    La section <customErrors> permet de configurer
    les actions à exécuter si/quand une erreur non gérée se produit
    lors de l'exécution d'une demande. Plus précisément,
    elle permet aux développeurs de configurer les pages d'erreur html
    pour qu'elles s'affichent à la place d'une trace de la pile d'erreur.

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
    <error statusCode="403" redirect="NoAccess.htm" />
    <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    -->
    <pages>
    <controls>
    <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></controls></pages>
    <httpHandlers>
    <remove verb="*" path="*.asmx"/>
    <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpHandlers>
    <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></httpModules></system.web>
    <system.codedom>
    <compilers>
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
    <providerOption name="CompilerVersion" value="v3.5"/>
    <providerOption name="WarnAsError" value="false"/></compiler></compilers></system.codedom>
    <!--
    La section system.webServer est requise pour exécuter ASP.NET AJAX sur Internet
    Information Services 7.0. Elle n'est pas nécessaire pour les versions précédentes d'IIS.
    -->
    <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
    <remove name="ScriptModule"/>
    <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></modules>
    <handlers>
    <remove name="WebServiceHandlerFactory-Integrated"/>
    <remove name="ScriptHandlerFactory"/>
    <remove name="ScriptHandlerFactoryAppServices"/>
    <remove name="ScriptResource"/>
    <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></handlers></system.webServer>
    <startup><supportedRuntime version="v2.0.50727"/></startup>
    <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/></dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
    <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/></dependentAssembly></assemblyBinding></runtime></configuration>

    经过六个小时的调试,我没有找到解决问题的方法。请帮忙!

    最佳答案

    如果您使用的是 Web Site项目,你应该把你的代码隐藏GeocachingServer.asmx.cs~/App_Code/目录并指向 .asmx 中的该路径

    如果这不起作用,您忘记右键单击您的虚拟目录并选择 Convert to Application .

    虽然您应该创建一个 application首先在该文件夹上,而不是使其成为虚拟目录。您应该点击 Add Application创建它时。

    IIS7 Convert to application

    关于.net - 在 IIS 7.0 上访问 .asmx 页面时出现 "Could not create type XXXX",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239131/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com