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 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文件中的class属性的命名空间不是很好(在我的例子中)
>如果包含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,PublicKeyToken=31BF3856AD364E35"> <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup,PublicKeyToken=31BF3856AD364E35"> <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection,PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection,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,PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Web.Extensions,PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Xml.Linq,PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.DataSetExtensions,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,PublicKeyToken=31BF3856AD364E35"/> <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions,PublicKeyToken=31BF3856AD364E35"/></controls></pages> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35"/> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35"/> <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler,PublicKeyToken=31BF3856AD364E35"/></httpHandlers> <httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,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,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,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,PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory,PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler,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>
经过六个小时的调试,我没有找到我的问题的解决方案.请帮忙!
解决方法
如果没有工作,您忘记右键单击虚拟目录,然后选择转换为应用程序.
虽然您应该首先在该文件夹上创建一个application,而不是使其成为虚拟目录.您应该在创建应用程序时单击添加应用程序.