私は jQuery を使用して Web サービスを呼び出していますが、非常に奇妙な問題があり、午前中ずっと問題がありました。開発環境で Web サービスを呼び出すと、すべてが完全に機能します。本番環境に入ると、Firebug から「301 Moved Permanently 38ms」が表示されます。
次のようなスクリプトがあります。
var data = '{"product":"' + productName + '", "from":"' + from + '", "question":"' + question + '", "phone":"' + phone + '", "type":"' + typeOfMail + '"}';
$.ajax({
type: "POST",
datatype: "json",
data: data,
url: '<%= Page.ResolveUrl("~/Services/MailService.asmx/SendProductEmail") %>',
contentType: "application/json; charset=utf-8",
success: function (data) {
resetContactControls();
$('#<%=AskQuestionProductBtn.ClientID %>').hide();
},
failure: function (data) {
}
});
これは、本番環境で次の URL にコンパイルされます。
url: '/Services/MailService.asmx/SendProductEmail'
私の本番環境では、Firebug を使用して、URL にアクセスしようとしていることがわかります。
http://www.hcemballering.dk/Services/MailService.asmx/SendProductEmail
この URL を手動で開こうとすると、Web サービスにヒットしました。また、通常の ../Services/MailService.asmx/SendProductEmail を使用するように URL を変更してみました。
また、セキュリティ設定を確認しようとしましたが、動作するはずです (すべてのプロセスがアクセスできます)。ユーザー「全員」に「サービス」へのフルアクセスを許可しようとしたので、問題にはなりません。
これは私のWebサービスクラスです:
[ScriptService]
public class MailService : System.Web.Services.WebService {
ILog logger = LogManager.GetLogger(typeof(MailService));
[WebMethod]
public bool SendProductEmail(string product, string from, string question, string phone, string type)
{
try
{
StringBuilder content = new StringBuilder();
content.AppendLine(
string.Format(
"Produkt:<br/>{0}<br/><br/>Fra email:<br/>{1}<br/><br/>Telefon:<br/>{2}<br/><br/>Type af henvendelse:<br/>{3}<br/><br/>Spørgsmål:<br/>{4}",
product, from, phone, type, question));
var module = new MailModule(content.ToString(), "Kontakt om HC produkt: " + product);
module.SendMail();
}
catch (Exception exp)
{
throw new Exception("Mailen blev desværre ikke sendt, da der skete en fejl");
}
return true;
}
}
何か案は?