Исправлена ​​ошибка System.ServiceModel.FaultException'1'

У меня есть сервисная ссылка, определенная в моем проекте (созданная в vs2013), и привязки в AppConfig определены таким образом;

<system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IERSAPIService" maxReceivedMessageSize="2147483647"/>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://staging.saffire-online.co.uk/ERSAPIService/ERSAPIService.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IERSAPIService"
                contract="ErsTestSite.IERSAPIService" name="BasicHttpBinding_IERSAPIService" />
        </client>
    </system.serviceModel>

В этой сервисной ссылке есть функция:

Public Function salesXMLCheck(ByVal xmlString As String) As String Implements ErsTestSite.IERSAPIService.salesXMLCheck
            Return MyBase.Channel.salesXMLCheck(xmlString)
        End Function

Если я передам в эту функцию следующую строку ('Hello'), она вернет следующее:

<?xml version="1.0" encoding="UTF-8"?>
<ers itemtype="Sales Note" doctype="RET" status="NAK" errorcode="E200 [XML Parse Error]" date="2015-06-10 08:02:42" />

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

Тем не менее, если я затем вызову эту функцию снова, но на этот раз, передавая некоторый действительный xml;

<?xml version="1.0" encoding="UTF-8"?>
<ers uname="apiuser" pword="apipassword" myAttribute="fooBar" anotherOfMyAttributes="123456">
    <salesnote snType="S" action="INSERT" salesContractRef="" saleDate="20090807" auctionID="14" logBookNums="" landingDecNums="" vesselName="SEA ANGEL" vesselPln="TN103" vesselMasterOwner="ARRANBRAE LTD" landingDate1="20090807" landingDate2="" landingDate3="" countryOfLanding="GBR" landingPortCode="GBADR">
        <salesline speciesCode="NEP" faoAreaCode="27" ZoneCode="VB1" disposalCode="HCN" freshnessCode="A" sizeCode="2" presentationCode="HEA" stateCode="FRE" numberOfFish="" weightKgs="52" value="765" currencyCode="GBP" withdrawnDestinationCode="OTH" buyerReg="201" salesContractRef="B4123"/>
        <salesline speciesCode="WHB" faoAreaCode="27" ZoneCode="VB2" disposalCode="HCN" freshnessCode="A" sizeCode="3" presentationCode="GHT" stateCode="FRE" numberOfFish="" weightKgs="12" value="55" currencyCode="EUR" withdrawnDestinationCode="BOL" buyerReg="201" salesContractRef="TT45687"/>
        <salesline speciesCode="JAD" faoAreaCode="27" ZoneCode="VIID" disposalCode="COV" freshnessCode="C" sizeCode="2" presentationCode="FIL" stateCode="FRE" numberOfFish="" weightKgs="300" value="330" currencyCode="GBP" withdrawnDestinationCode="GIF" buyerReg="201" salesContractRef="B5687"/>
    </salesnote>
</ers>

Я получаю System.ServiceModel.FaultExceptio'1', который дает мне дополнительное сообщение; @String должен быть ровно 1 символ '.

ошибка выдается в строке returnEditor.text в функции ниже;

Dim value As String = File.ReadAllText("C:\Users\Public\Documents\View to Learn\SNADD.xml")

        Using ters As New ErsTestSite.ERSAPIServiceClient
            ters.Open()
            returnsEditor.Text = ters.salesXMLCheck(value)
            ters.Close()
        End Using

Понятно, что соединение со службой работает, или то же сообщение выдается, когда я подставляю "Hello" в качестве параметра функции, так почему эта ошибка выдается, когда я пытаюсь передать действительный xml?

РЕДАКТИРОВАТЬ

когда я внимательно смотрю на трассировку стека, я вижу следующее:

   at System.Convert.ToChar(String value, IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Data.Linq.DBConvert.ChangeType(Object value, Type type)
   at Read_FreshnessGrade(ObjectMaterializer`1 )
   at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at ERSAPIService.Helper.SalesNoteHelper.SalesNoteCheck(XDocument xlowerDocument, XDocument xmlOutput, String rootName, String userId) in C:\Users\ravneet.sodhi\Desktop\ERSAPIService\ERSAPIService\Helper\SalesNoteHelper.cs:line 262
   at ERSAPIService.Helper.SalesNoteHelper.salesXMLCheck(String xmlString) in C:\Users\ravneet.sodhi\Desktop\ERSAPIService\ERSAPIService\Helper\SalesNoteHelper.cs:line 71
   at ERSAPIService.ERSAPIService.salesXMLCheck(String xmlString) in C:\Users\ravneet.sodhi\Desktop\ERSAPIService\ERSAPIService\ERSAPIService.svc.cs:line 1776

Поскольку я совершенно определенно не raveet.sodhi, означает ли это, что xml на самом деле успешно передается на другой конец, но что там есть проблема в службе?

1 ответ

Решение

Поскольку я совершенно определенно не raveet.sodhi, означает ли это, что xml на самом деле успешно передается на другой конец, но что там есть проблема в службе?

Да, вы позвонили в службу просто отлично.

Кажется, служба использует LINQ to SQL и где-то использует Char поле, где это должно быть String,

Другие вопросы по тегам