Programmatic TFS 2010イベント登録+エラーHTTPコード415:コンテンツを処理できません

私は、BuildQualityChangedイベントとWorkItemChangedイベントを読み出すためにtfsイベント登録を使用したいと思います。数か月前に働いていましたが、イベントxmlを取得中に次のエラーが表示されます:

HTTP code 415: Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'. ---> System.Net.WebException: The remote server returned an error: (415) Cannot process the message because the content type 'application/soap+xml; charset=utf-8' was not the expected type 'text/xml; charset=utf-8'..

私は後でWindowsサービスになるコンソールアプリケーションをビルドします。 wcfサービスをホストするためのコードは次のとおりです。

private void HostWcfService()
{
    D_("Hosting WCF service");
    var serviceUri = new Uri(GetCorrectServiceAddress());
    _host = new ServiceHost(typeof(BuildQualityChanged), new []{serviceUri});
    AddBehaviors(_host);
    SetBinding(_host, serviceUri);
    _host.Open();
}

private static void AddBehaviors(ServiceHost service)
{
    var smb = service.Description.Behaviors.Find();
    if (smb == null)
    {
        smb = new ServiceMetadataBehavior();
        service.Description.Behaviors.Add(smb);
    }
    smb.HttpGetEnabled = true;

    var sdb = service.Description.Behaviors.Find();
    if (sdb == null)
    {
        sdb = new ServiceDebugBehavior();
        service.Description.Behaviors.Add(sdb);
    }
    sdb.IncludeExceptionDetailInFaults = true;
}

private void SetBinding(ServiceHost _host, Uri serviceUri)
{
   //create and configure an MTOM encoder
    var mtom =
        new TextMessageEncodingBindingElement(
            MessageVersion.Soap11, Encoding.UTF8);

   //create a CustomBinding using MTOM encoder
    CustomBinding binding = new CustomBinding();
    binding.Elements.Add(mtom);
    binding.Elements.Add(
        new HttpTransportBindingElement());
    _host.AddServiceEndpoint(typeof(TFS.Build.ITeamFoundationEventSubscriber),
        binding, serviceUri);
}

これまで私が見つけたすべてのソリューションは、web.configでサービスを設定していますが、これは私にとっては解決策ではありません。プログラムでホストする必要があります。私が見つけた2番目の解決策は、CustomBindingではなくBasicHttpBindingを使用することですが、これは私にとってはうまくいきません.tfsは同じエラーで壊れます。私は、BasicHttpBindingを使ってWSDL内のSOAPバージョンがSOAP 1.2であることを知りました。 BasicHttpBindingを使用するためのSetBinding()

var binding1 = new BasicHttpBinding();
            binding1.Name = "binding1";
            binding1.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
            binding1.Security.Mode = BasicHttpSecurityMode.None;
            _host.AddServiceEndpoint(typeof(TFS.Build.ITeamFoundationEventSubscriber), binding1, serviceUri);

要求と要求の唯一の違いはコンテンツタイプです。application/xmlではなくapplication/soap + xmlが必要です

誰かが私の脳がどこに間違っているのか教えてくれますか?

マイケル

2

1 答え

検索の時間が経っても、私は解決策を見つけられませんでした。マイクロソフトのオタクが私にそれを取り除く助けになる:

TFS2010はセキュリティなしでwsHttpBindingのみをサポートします

私のSetBinding()メソッドの内容は次のようになりました:

var binding1 = new WSHttpBinding();
binding1.Name = "binding1";
binding1.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
binding1.Security.Mode = SecurityMode.None;
_host.AddServiceEndpoint(typeof(TFS.Build.ITeamFoundationEventSubscriber), binding1, GetCorrectServiceAddress());

マジック、それは:)

1
追加された