0

私は 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;
    }

}

何か案は?

4

2 に答える 2

3

わかりました、これはばかげていました。

これは、web.config のルールが原因でした。次のルールがありました。

  <rule name="LowerCaseRule1" stopProcessing="true">
          <match url="[A-Z]" ignoreCase="false"/>

          <action type="Redirect" url="{ToLower:{URL}}"/>
        </rule>

もちろん、私の URL は小文字ではありませんでした。だから私はこれをしました:

 <rule name="LowerCaseRule1" stopProcessing="true">
          <match url="[A-Z]" ignoreCase="false"/>
          <conditions>
            <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/>
          </conditions>
          <action type="Redirect" url="{ToLower:{URL}}"/>
        </rule>

また、とにかくスタイルが良いという理由だけで、すべてを小文字にしました。

そしてそれはうまくいきます!

于 2013-03-24T14:42:32.600 に答える
0

Web サービスを手動でヒットするときに GET を使用しています。ajax は POST を使用しています。Web サービスは POST を受信するように設定されていますか?

于 2013-03-23T13:38:45.810 に答える