2015-06-10 1 views
1

У меня есть ссылка на службу, определенная в моем проекте (созданная в vs2013), и привязки в AppConfig определены таким образом;System.ServiceModel.FaultException'1 'изменен

<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;

<?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 символ длиной '.

ошибка выводится на строку returnsEditor.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?

EDIT

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

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.

+0

Спасибо, я полагаю, это означает, что мне нужно попасть на людей, которые построили службу, и посмотреть, смогу ли я заставить их исправить это. –

+0

Провести тест на зеркало этого (ну, это зеркало, которое не сломано!), И все получилось просто отлично. Огромное вам спасибо, я начал сходить с ума. –