따라서 FaultException
이 BasicHttpBinding
을 사용할 때 적절한 결과를 제공하지 못하는 것으로 나타났습니다. WSHttpBinding
을 사용하면 파일이 작동합니다. 나는 다음과 같은 FaultException
를 던질 경우에만 다시 점점 첫 번째 (FaultReasonText 1
)을 의미 fault.Reason.Translations
카운트가 1 인 클라이언트에 도달하면BasicHttpBinding을 사용할 때 FaultException이 올바로 작동하지 않습니다.
문제는, WCF 서비스에서
var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
입니다 고객에게.
하지만 WSHttpBinding
을 사용할 때 개수는 2입니다. 문제가있는 곳은 어디입니까? 아무도 이것에 나를 도울 수 있습니까.
내가 은 BasicHttpBinding & WsHttpBinding과 바인딩 아래의 코드를 테스트 할 때 그것은 나에게 다른 결과를 제공합니다.
class Program
{
static void Main(string[] args)
{
try
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(MessageService), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(IMessageService), new WSHttpBinding(), "");
host.Open();
Console.WriteLine("Host opened");
ChannelFactory<IMessageService> myChannelFactory = new ChannelFactory<IMessageService>(new WSHttpBinding(), new EndpointAddress(baseAddress));
IMessageService channel = myChannelFactory.CreateChannel();
var response = channel.GetMessage();
}
catch (FaultException fault)
{
fault.Reason.Translations.ToList().ForEach(i => Console.WriteLine(i.Text));
Console.WriteLine(false);
}
}
}
[ServiceContract]
public interface IMessageService
{
[OperationContract]
[FaultContract(typeof(MessageServiceFault))]
string GetMessage();
}
public class MessageService : IMessageService
{
public string GetMessage()
{
var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
}
}
[DataContract]
public enum MessageServiceFault
{
[EnumMember]
Fault1,
[EnumMember]
Fault2
}
편집는 :
그러나,이 article 당신은 사용자의 언어 설정에 따라에서 발탁 다른 텍스트 문자열의 수를 제공 할 수 있습니다 말했다. 번역 버킷에는 서로 다른 모든 텍스트 문자열과 관련 문화 식별자 (FaultReasonText로 함께 묶음)가 있습니다. 오류 이유 또는 번역 검색에 대한 culture가 지정되지 않은 경우 가정 된 문화는 현재 스레드 문화입니다. 예를 들어 'en-UK'로 번역하려는 경우 먼저 'en-UK'를 찾은 다음 'en'을 찾습니다. 그래도 일치하는 항목을 찾지 못하면 목록에있는 첫 번째 번역을 가져옵니다.
WsHttpBinding
의 경우을 반환하는 이유는 무엇입니까?
-1 : 사실이 아닙니다. 'basicHttpBinding'도 SOAP 1.2를 지원합니다. –
@ JohnSaunders, RomEh 대답이 정확하지 않습니다. 하지만 basicHttpBinding은 SOAP 1.2를 지원하지 않습니다. 이것을 읽으십시오 http://msdn.microsoft.com/en-us/library/ms731361.aspx –
당신은 저를 신뢰하지 않으며 다만이 공구를보십시오 : http://webservices20.cloudapp.net/default. aspx. –