Вопрос

Я получал страшный "клиент нашел ответный контент типа" Text / html ", но ожидается ошибка" test / xml ", но после некоторого густота я нашел Это сообщение о том, как вернуть SOAPException.

Так что я пошел вперед и реализовал это, но теперь я все еще получаю ту же ошибку. Есть ли изменения, которые мне нужно сделать на стороне клиента, чтобы иметь возможность принять SOAPException (я бы не так думал, все просто наследует от исключения, верно?)

Почему я все еще получаю этот страшный ответ на стороне клиента?

    [WebMethod]
    [SoapHeader("authenticationHeader")]
    [WebServiceAuthentication(AuthenticationRequired = false)]
    public DataSet GetConversionErrors()
    {
        try
        {
            return Components.PWD.GetConversionErrors();
        }
        catch (Exception ex)
        {
            PublishingManager.Publish(ex, HttpContext.Current.User.Identity.Name);
            throw Components.SoapException.GenerateSoapException(ex, Context);
        }
    }
.

Редактировать: Я знаю, что исключение в этом блоке Catch - это именно то, что мне нужно увидеть, но я все еще получаю систему. ВнимательноoperationException на стороне клиента.

Edit2: Я подключаюсь к веб-сервису через веб-экран (вызов файла * .asmx), если это помогает / имеет значение.

Edit3: Вот что записано на наш ExceptionLog Server-Side (в вызове PublisionManager.publish ()). Моя мысль была то, что это должно быть то, что возвращено клиенту ...

Exception Details:
Exception Type: System.Exception
Message: Test the text/html text/xml message. 
Method: PWD.Components.PWD.GetConversionErrors 
Username: xxxxxx Created 5/22/2012 4:20:53 PM 
Application: xxxx Application Identity: NT AUTHORITY\IUSR 
Source: xxxx Severity 2 
Machine: xxxxxxxxx IP Address 127.0.0.1 
AppDomain /LM/W3SVC/1/ROOT-1-129821937733610609 
Stack Trace    at PWD.Components.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\Components\PWD.cs:line 73 
   at PWD.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\PWD.asmx.cs:line 44 
Additional Information:
  +System.Exception: 
    Message: Test the text/html text/xml message. 
    Data: System.Collections.ListDictionaryInternal 
    InnerException:  
    TargetSite: System.Data.DataSet GetConversionErrors() 
    StackTrace:    at PWD.Components.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\Components\PWD.cs:line 73 
   at PWD.PWD.GetConversionErrors() in C:\Vault\Development-New\Web\Main_Logging\PWD\PWD.asmx.cs:line 44 
    HelpLink:  
    Source: xxxx 
     UserName: xxxxxxx 
     TypeName: PublishingManager 
     MachineName: xxxxxxxxx 
     TimeStamp: 5/22/2012 4:20:54 PM 
     FullName: Services.Publishing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=null 
     AppDomainName: /LM/W3SVC/1/ROOT-1-129821937733610609 
     ThreadIdentity:  
     WindowsIdentity: NT AUTHORITY\IUSR 
     Severity: 2 
     MachineIPAddress: 127.0.0.1 
.

Edit3: просто хочу бросить этот дополнительный кусок кода, чтобы люди увидеть, как я проверяю эти исключения (и, возможно, это неправильный путь для тестирования ...). В моем первом кусочке кода у меня есть звонок внутри блока TRY для «возврата Comporents.pwd.getconversionErrors ();», вот этот метод:

    public static DataSet GetConversionErrors()
    {
        DB db = new DB();

        try
        {
            //return db.ExecuteDataset(Configuration.GenericConfig.AppConnectionString, CommandType.Text, spGetConversionErrors);
            throw new Exception("Test the text/html text/xml message.");
        }
        catch
        {
            throw;
        }
    }
.

Как вы можете видеть, я прокомментировал фактический звонок и просто бросил в свою собственную линию, которая выбросит исключение каждый раз, когда целы тестирования ...

edit4: @gbvb Вот новый метод:

    [WebMethod]
    [SoapHeader("authenticationHeader")]
    [WebServiceAuthentication(AuthenticationRequired = false)]
    public DataSet GetConversionErrors()
    {
        try
        {
            return Components.PWD.GetConversionErrors();
        }
        catch (Exception ex)
        {
            //PublishingManager.Publish(ex, HttpContext.Current.User.Identity.Name);
            //throw Components.SoapException.GenerateSoapException(ex, Context);

            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            System.Xml.XmlNode detailNode = xmlDoc.CreateNode(System.Xml.XmlNodeType.Element, System.Web.Services.Protocols.SoapException.DetailElementName.Name, System.Web.Services.Protocols.SoapException.DetailElementName.Namespace);
            detailNode.InnerText = ex.ToString();

            throw new System.Web.Services.Protocols.SoapException(ex.Message, System.Web.Services.Protocols.SoapException.ClientFaultCode, System.Web.HttpContext.Current.Request.Url.AbsoluteUri, detailNode, ex.InnerException);
        }
    }
.

Редактировать5: какую Fiddler2 видел:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 23 May 2012 19:25:56 GMT
Content-Length: 1208

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>
.

Если кто-то знает, чтобы приятно формировать этот раздел, пожалуйста, сделайте :)

Это было полезно?

Решение

Итак, я получил его на работу.Вот что я узнал:

При просмотре свойства моего сайта в IIS, затем выбирая «модули», существует запись под названием «Customerrormodule», которая пытается обрабатывать ошибки, которые выброшены на сайт / веб-сервис.

Исправление - либо удалить эту запись «CustomerrorModule», либо обновить мой файл конфигурации из:

<httpErrors errorMode="Custom" existingResponse="Replace">
.

to:

<httpErrors errorMode="Custom" existingResponse="Auto">
.

Спасибо всем за помощь, она направила меня в правильном направлении.(Кстати, я обновляю файл конфигурации, чтобы мне не нужно беспорядок с модулем)

также, Вот ссылка , объясняя эту ситуацию.

Другие советы

Просто для хихипроектов, можете ли вы попробовать явно бросать новое MoxException () с помощью SOAPException.clientFaultCode в качестве типа из этого вызова?Очевидно, у вас есть несколько слоев, которые могут провалиться в коде, который вы показываете выше, и легко испортить (поверьте мне, я знаю :)).И не называйте другие методы, такие как Publisher.Publish .. это будет указывать на то, является ли это объявление о сообщениях (I.e. asmx Infrastructure) или ваш код, который водит с исключением ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top