簡體   English   中英

WCF服務使用后收到錯誤請求

[英]getting Bad Request in post WCF service consuming

我正在使用jquery在asp.net中使用post wcf服務。 我們可以通過用戶登錄和不登錄來調用該服務。 下圖顯示了在提琴手中檢查的發布請求 在此處輸入圖片說明

當我在用戶登錄后調用相同的服務時,它發出了錯誤的請求,下圖顯示了用戶登錄后在提琴手中檢查的發布請求

在此處輸入圖片說明

在此應用程序中,我使用了身份框架。

請給我一個解決這個問題的想法。

jQuery代碼:

我用於消費WCF服務的以下代碼

 $("#btnSubmitReport").click(function () {

        // var count = document.getElementById().RatingBehavior._currentRating;
        var count = $("#<%=hdnRating.ClientID%>").val();


        if ($("input[id$='txtBannerCode']").val() == '') {
            alert('Banner Code is Required')
            $("input[id$='txtBannerCode']").focus();
        }
        else if ($('#<%= ddlIncidentType.ClientID %>').val() == "0") {
            alert('Please choose an option.')
            $('#<%= ddlIncidentType.ClientID %>').focus();
        }
        else if (count == "0") {
            alert('Driver Rating is Required.')
        }
        else if ($("textarea[id$='txtComment']").val() == '') {
            alert('Comment is Required')
            $("textarea[id$='txtComment']").focus();
        }

        else {

            ShowSendingProgress();
            var millisecondsToWait = 500;
            setTimeout(function() {

                if (checkCookie($("input[id$='txtBannerCode']").val() + $('#<%= ddlStates.ClientID %>').val()) == true) {
                    WCFJSONById();
                }
            }, millisecondsToWait);

}});

function WCFJSONById() {
    var count = $("#<%=hdnRating.ClientID%>").val();        
    var objIncident2 = {};
    objIncident2.StateAbbreviation = $('#<%= ddlStates.ClientID %>').val();
    objIncident2.BannerCode = $("input[id$='txtBannerCode']").val();
    objIncident2.IncidentTypeID = $('#<%= ddlIncidentType.ClientID %>').val();
    objIncident2.DrivingSkillID = count;
    objIncident2.Comment = $("textarea[id$='txtComment']").val();
    objIncident2.Latitude = "0";
    objIncident2.Longitude = "0";
    objIncident2.DeviceID = "";
    var browser = detectBrowser();
    objIncident2.DeviceUsed = browser.toString();

    var objIncident1 = {};
    objIncident1.objIncident = objIncident2;

    //      alert(JSON.stringify(objIncident1));



    Type = "POST";
    Url = "RoadLynkService.svc/SendIncidentReport";
    Data = JSON.stringify(objIncident1);
    ContentType = "application/json; charset=utf-8; charset-uf8;";
    DataType = "json"; ProcessData = true;
    CallService();

}



function CallService() {
    $.ajax({
        async: false,
        type: Type, //GET or POST or PUT or DELETE verb
        url: Url, // Location of the service
        data: Data, //Data sent to server
        contentType: ContentType, // content type sent to server
        dataType: DataType, //Expected data format from server
        processdata: ProcessData, //True or False
        success: function (msg) {//On Successfull service call
            ServiceSucceeded(msg);
        },
        error: ServiceFailed// When Service call fails
    });
}

Wcf服務代碼

 public string SendIncidentReport(IncidentInputParameters objIncident)
    {
        return IncidentManager.InsertIncident(objIncident.StateAbbreviation, objIncident.BannerCode, objIncident.IncidentTypeID,
            objIncident.DrivingSkillID, objIncident.Comment, Convert.ToDecimal(objIncident.Latitude), Convert.ToDecimal(objIncident.Longitude), objIncident.DeviceID, objIncident.DeviceUsed);
    }

在插入事件方法中,我編寫了用於插入數據庫的代碼。

事件輸入參數類別

 public class IncidentInputParameters
{

    public string StateAbbreviation { get; set; }


    public string BannerCode { get; set; }

    public string IncidentTypeID { get; set; }


    public string DrivingSkillID { get; set; }


    public string Comment { get; set; }


    public string Latitude { get; set; }


    public string Longitude { get; set; }


    public string DeviceID { get; set; }

    public string DeviceUsed { get; set; }
}

Web.config綁定

<system.serviceModel>
<behaviors>


  <endpointBehaviors>

    <behavior name="RESTEndpointBehavior">

      <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json"

               automaticFormatSelectionEnabled="true"/>
    </behavior>

  </endpointBehaviors>

  <serviceBehaviors>

    <behavior name="RESTServiceBehavior">

      <serviceMetadata httpGetEnabled="true" />

      <serviceDebug includeExceptionDetailInFaults="false"/>

    </behavior>

  </serviceBehaviors>

</behaviors>

<bindings>
  <webHttpBinding>
    <binding name="RESTBindingConfiguration" crossDomainScriptAccessEnabled="true">
      <security mode="None" />
    </binding>
  </webHttpBinding>
</bindings>

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<services>
  <service behaviorConfiguration="RESTServiceBehavior" name="RoadLynkWeb.RoadLynkService">
    <endpoint address="" binding="webHttpBinding"   bindingConfiguration="RESTBindingConfiguration"
              behaviorConfiguration="RESTEndpointBehavior" contract="RoadLynkWeb.IRoadLynkService" />

    <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />

  </service>
</services>
<standardEndpoints>
  <webHttpEndpoint>

    <standardEndpoint crossDomainScriptAccessEnabled="true"></standardEndpoint>
  </webHttpEndpoint>
  <webScriptEndpoint>
    <standardEndpoint   crossDomainScriptAccessEnabled="true" />
  </webScriptEndpoint>
</standardEndpoints>

服務失敗響應

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Request Error</title>
   <style>BODY { color: #000000; background-color: white; font-family: Verdana; margin-left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding-bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; } A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active { color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background-color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font-size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding-left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding: 5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre-wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse; border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid; border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td { border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;}</style>
 </head>
 <body>
    <div id="content">
     <p class="heading1">Request Error</p>
     <p xmlns="">The server encountered an error processing the request. Please see the <a rel="help-page" href="http://localhost/RoadLynkWeb/RoadLynkService.svc/help">service help page</a> for constructing valid requests to the service. The exception message is 'Cross domain javascript callback is not supported in authenticated services.'. See server logs for more details. The exception stack trace is: </p>
  <p>   at System.ServiceModel.Dispatcher.JavascriptCallbackMessageInspector.AfterReceiveRequest(Message&amp; request, IClientChannel channel, InstanceContext instanceContext)
   at      System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.AfterReceiveRequestCore(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p>
</div>

謝謝,普爾納

我找到了答案,只是我們需要指定crossDomainScriptAccessEnabled =“ false”而不是true

謝謝 ,

普爾納

您必須傳遞一個IncidentInputParameters對象。 你已經做了objIncident2的屬性objIncident1這將使objIncident1類和objIncident2這個類的一個屬性。

因此,這將在c#中翻譯成類似IncidentInputParameters.Someproperty 您只需要在ajax調用objIncident2作為數據傳遞

Data = JSON.stringify(objIncident2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM