我正在尝试使用jQuery调用驻留在.aspx页面上的WebMethod。在开发环境(localhost)工作正常,但是当我从服务器运行它时,似乎根本没有调用WebMethod。我正在使用的服务器环境工具是.Net 2.0 SP2,IIS7.5和Visual Studio 2005。
正在调用的WebMethod创建并写入.xml文件。然后,由另一个找不到它的方法搜索此文件,因为WebMethod未执行且文件从未创建过。
这些是我为解决问题而尝试过的一些事情:
•添加ScriptManager。我从.aspx文件中删除了它,因为它没有解决问题,并在博客中读到不需要ScriptManager以使WebMethod调用有效。
•在RadScriptManager中设置属性EnablePageMethods = true。目前它不再设置为真,因为它没有解决问题。
•在web.config文件中添加ScriptModule。
•在web.config中添加协议:
<system.web>
<webServices>
<protocols>
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>
<system.web>
我从Web.config文件中删除了这些,因为它们没有解决问题,并在博客中读到在运行.net 1.1和IIS 5.0,IIS 5.1,IIS6.0的环境中需要这些标记。
•为用户和池分配写入权限,以便他们能够写入该文件夹。 (IIS 7.5)
我在Web.config文件中遗漏了什么?可能导致问题的原因是什么?
这是WebMethod:
[WebMethod]
public static string GetContinuityofCareDocument(string continuityofCareDocument, string indicator, string endOffile)
{
string _filePrefix = indicator;
string _fileNamexml = @"C:\TempFile" + _filePrefix + ".xml";
StreamWriter _txtFile = new StreamWriter(_fileNamexml, true);
_txtFile.Write(continuityofCareDocument);
_txtFile.Close();
return " Success";
}
以下是调用WebMethod的位置:
<script language="javascript" type="text/javascript">
function SendCcdtoServer(params,indicator,endOffile) {
jQuery.ajaxSetup({ async: true });
jQuery.ajax({
type: "POST",
url: '<%=ResolveUrl("WebServiceDisplayCCD.aspx")%>'+'/GetContinuityofCareDocument',
data: '{continuityofCareDocument: "'+params+'", indicator: "'+indicator+'", endOffile: "'+endOffile+'"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
error: function(response) {
alert("response + failure ");
}
});
}
function OnSuccess(response) {
alert("Success");
}
</script>
这是Web.config:
<configuration>
<configSections>
<sectionGroup name="Localization">
<section name="Localization" type="Localization.LocalizationConfigurationHandler, Localization,Version=1.0.0.0, Culture=neutral, PublicKeyToken=CA5930580A5E0032" />
</sectionGroup>
</configSections>
<system.web>
<pages enableViewStateMac="false" validateRequest="true" enableEventValidation="false" viewStateEncryptionMode="Never" smartNavigation="false" />
<httpModules>
<remove name="ScriptModule" />
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>
<httpHandlers>
<add path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource" verb="*" validate="false" />
</httpHandlers>
<compilation debug="true">
<assemblies>
…
</assemblies>
</compilation>
<sessionState mode="SQLServer" sqlConnectionString="Data Source=###.###.###.#;User ID=XXXXX;password=XXXXXX" cookieless="false" timeout="60" />
<globalization enableClientBasedCulture="true" />
</system.web>
<location allowOverride="true" inheritInChildApplications="true">
<appSettings>
<add key="Authentication" value="Windows" />
</appSettings>
</location>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<add name="Telerik_Web_UI_WebResource_axd" verb="*" preCondition="integratedMode" path="Telerik.Web.UI.WebResource.axd" type="Telerik.Web.UI.WebResource"/>
</handlers>
</system.webServer>
</configuration>
当使用chrome的开发人员工具时,我收到500错误,该错误指出“无效的JSON”并包含整个页面的脚本。
在搜索此错误的可能解决方案后,我收到许多关于如何解决“无效JSON原语”错误的博客,这似乎不适用于我正在处理的问题。
导致这种情况的原因是什么?
答案 0 :(得分:0)
尝试设置resolve var并在debug中查看它:
var url = '<%=ResolveUrl("WebServiceDisplayCCD.aspx")%>'
答案 1 :(得分:-1)
尽管这是一个非常简单的答案,但我花了很多时间来寻找答案,但是在任何站点上都找不到它: 它取决于开发模式和Internet上发布模式下的参数位置。
在开发模式下,您的网址是这样的
http:// localhost:portnumber/yournamesite/pagesite/parameter
参数的位置位于网址的位置4。
当您在iis上的Internet上发布站点时,您的URL变为
http://yoursite.com/pagesite/parameter
并且参数的位置在位置3上。