404 Ошибка, когда TFS 2010 отправляет предупреждение SOAP в службу WCF 4.0 - PullRequest
1 голос
/ 07 ноября 2010

Я пытаюсь написать службу WCF 4.0, которая будет получать оповещения SOAP от TFS 2010. Вот мой контракт на обслуживание:

 [ServiceContract(Namespace = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]
 public interface IService1
 {
        [OperationContract(Action = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify")]
        [XmlSerializerFormat(Style = OperationFormatStyle.Document)]
        void Notify(string eventXml, string tfsIdentityXml);
 }

Я использую эту конфигурацию привязки для моей конечной точки службы:

 <bindings>
  <wsHttpBinding>
   <binding name="noSecurity">
    <security mode="None"/>
   </binding>
  </wsHttpBinding >
 </bindings> 

После регистрации предупреждения TFS с использованием BISSUBSCRIBE.EXE и указания его на мой сервис, каждый раз, когда он запускается, мой сервис не вызывается, и вместо этого в журнале TfsJobAgent отображается следующее:

 Notification not delivered.
 Notification: WorkItemChangedEvent (DeliveryType: Soap; Address: http://192.168.10.10/TrafficLight/Service1.svc)
 Exception: Microsoft.TeamFoundation.TeamFoundationServiceUnavailableException: Team Foundation services are not available from server http://192.168.10.10/TrafficLight/Service1.svc.  Technical information (for administrator):
 HTTP code 404: Not Found ---> System.Net.WebException: The remote server returned an error: (404) Not Found.
  at System.Net.HttpWebRequest.GetResponse()
  at Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.AsyncWebRequest.ExecRequest(Object obj)
  --- End of inner exception stack trace ---
  at Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.ProcessHttpResponse(HttpWebResponse response, Stream responseStream, WebException webException, XmlReader& xmlResponseReader)
  at Microsoft.TeamFoundation.Client.TeamFoundationClientProxyBase.ExecWebServiceRequest(HttpWebRequest request, XmlWriter requestXml, String methodName, HttpWebResponse& response)
  at Microsoft.TeamFoundation.JobService.Extensions.Core.TeamFoundationNotificationClient.Notify(String eventXml, String tfsIdentityXml, Subscription subscription)
  at Microsoft.TeamFoundation.JobService.Extensions.Core.NotificationJobExtension.SendSoapNotification(TeamFoundationRequestContext requestContext, TeamFoundationNotification notification, TeamFoundationIdentityService identityService) 

(Это взято из таблицы [Tfs_Configuration]. [Dbo]. [Tbl_JobHistory] моей установки TFS 2010)

Как ни странно, когда я пробую URL своей службы в Internet Explorer на той же машине, гдеагент TfsJobAgent работает, я получаю стандарт «Вы создали службу».веб-страница автоматически генерируется WCF и не ошибка 404.

Наконец, мой вопрос: Почему агент заданий TFS получает ошибку 404 от моего сервиса, которая, кажется,быть правильно настроен?Как я могу решить эту проблему?

Обновление: я попытался переписать свой сервис как веб-сервис ASMX, и он работает хорошо.Ниже приведена реализация.Я все еще хочу узнать, как добиться того же, используя WCF 4.0, поэтому любая помощь будет принята с благодарностью.

 [WebService(Namespace = "http://tempuri.org/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 [System.ComponentModel.ToolboxItem(false)]
 public class WebService1 : System.Web.Services.WebService
 {
  [SoapDocumentMethod("http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03/Notify", RequestNamespace = "http://schemas.microsoft.com/TeamFoundation/2005/06/Services/Notification/03")]
  [WebMethod]
  public void Notify(string eventXml, string tfsIdentityXml)
  {
   // log incoming event...
  }

1 Ответ

2 голосов
/ 08 ноября 2010

Я создал это успешно - http://www.ewaldhofman.nl/post/2010/08/02/How-to-use-WCF-to-subscribe-to-the-TFS-2010-Event-Service-rolling-up-hours.aspx - и кажется, что вы используете те же шаги.

Вы также указали wsHttpBinding для конечной точки?

...