因此,我注意到FaultException
在使用BasicHttpBinding
時沒有給出正確的結果。當我使用WSHttpBinding
它工作文件。FaultException在使用BasicHttpBinding時無法正常工作
的問題是,從WCF服務,如果我扔FaultException
像下面,
var translations = new List<FaultReasonText> { new FaultReasonText("FaultReasonText 1"), new FaultReasonText("FaultReasonText 2") };
throw new FaultException<MessageServiceFault>(MessageServiceFault.Fault1, new FaultReason(translations));
當它達到向客戶端fault.Reason.Translations
計數爲1。這意味着第一個(FaultReasonText 1
)只找回給客戶。
但是,當我使用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說,你可以提供一個數字,從獲得根據用戶的語言設置不同採摘的文本字符串。 Translations桶保存所有不同的文本字符串及其相關的文化標識符(通過FaultReasonText連接在一起)。當沒有針對故障原因或翻譯搜索指定文化時,假定的文化就是當前的線索文化。例如,如果您想要翻譯爲「en-UK」,我們首先會查找「en-UK」,然後我們會查找「en」。如果我們仍然無法找到匹配,那麼我們會在列表中找到第一個翻譯,這可能是任何事情。
如果是這樣,爲什麼在WsHttpBinding
的情況下返回我2 FaultReasonText
?
-1:這是不正確的。 'basicHttpBinding'也支持SOAP 1.2。 – 2013-03-15 01:16:35
@JohnSaunders,RomEh的回答不正確。但我想basicHttpBinding不支持SOAP 1.2。閱讀本文http://msdn.microsoft.com/en-us/library/ms731361.aspx – 2013-03-15 03:27:11
我不信任我,只是看看這個工具:http://webservices20.cloudapp.net/default。 ASPX。 – 2013-03-15 13:05:36