PHP to WCF with SOAP?

Ye' old general discussion board. Basically, for everything that isn't covered elsewhere. Come here to shoot the breeze, shoot your mouth off, or whatever suits your fancy.
This forum is not for asking programming related questions.

Moderator: General Moderators

Post Reply
brekehan
Forum Newbie
Posts: 3
Joined: Mon Oct 26, 2009 4:57 pm

PHP to WCF with SOAP?

Post by brekehan »

I have been tasked with creating SOAP service that is part of an already existing windows service and to communicate with it via SOAP in PHP.
It has been 5 years since I've written PHP and I have only dabbled with .NET. Anyway I googled my ass off and wrote up a windows service that hosts a WCF service and implemented a test contract. Evidently it does not create a WSDL file, or perhaps it makes one itself when its requested. I dunno, the docs suck.

I wrote up a PHP file to test it out and it errors out that it cannot connect.


I get the following output:
PHP Warning: SoapClient::SoapClient(http://localhost/TestService.wsdl) [soapclient.soapclient]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\inetpub\wwwroot\DatabaseUpdate.php on line 80 PHP Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://localhost/TestService.wsdl" in C:\inetpub\wwwroot\DatabaseUpdate.php on line 80 PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/TestService.wsdl' : failed to load external entity "http://localhost/TestService.wsdl" in C:\inetpub\wwwroot\DatabaseUpdate.php on line 80

I don't know how to instantiate a PHP client properly. I don't understand URIs and am pretty much lost.
Any help?

Here is my PHP code. (PS the scroll box here seems to be all screwed up)

Code: Select all

 
<?php
   $client = new SoapClient("http://localhost/TestService.wsdl");
 
   echo("\nDumping client object:\n");
   var_dump($client);
}
catch(Exception $e)
{
   echo 'Caught exception: '.  $e->getMessage(). "\n"; 
} 
?>
 
Here is my windows service code

Code: Select all

 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceProcess;
using System.Text;
 
namespace TestService
{
   /// <summary>
   /// The hosted service
   /// </summary>
   public class TestService : ServiceBase, ITestService
   {
      public ServiceHost serviceHost = null;
 
      /// <summary>
      /// Constructor
      /// </summary>
      public TestService()
      {
         this.ServiceName = "TestService";
         this.CanPauseAndContinue = true;
      }
 
      /// <summary>
      /// Dispose
      /// Cleans up objects that need it
      /// </summary>
      /// <param name="disposing">Whether or not disposing is going on.</param>
      protected override void Dispose(bool disposing)
      {
         base.Dispose(disposing);
      }
 
      /// <summary>
      /// Entry point of executable
      /// </summary>
      public static void Main()
      {
         ServiceBase.Run(new TestService());
      }
 
      /// <summary>
      /// Called when the service starts
      /// </summary>
      /// <param name="args"></param>
      protected override void OnStart(string[] args)
      {
         // Set the base address where the service may be called by clients
         this.serviceHost = new ServiceHost(typeof(TestService), new Uri("http://localhost:8000"));
 
         try
         {
            // Add a service endpoint
            // The endpoint binding is appended to the base address set in the service host
            serviceHost.AddServiceEndpoint(typeof(ITestService), new BasicHttpBinding(), "TestService");
 
            // Enable metadata exchange
            ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
            behavior.HttpGetEnabled = true;
            serviceHost.Description.Behaviors.Add(behavior);
 
            // Start the service
            serviceHost.Open();
         }
         catch(CommunicationException e)
         {
            serviceHost.Abort();
         }
      }
 
      /// <summary>
      /// Called when the service stops
      /// </summary>
      protected override void OnStop()
      {
         serviceHost.Close();
      }
 
      #region IServiceContract Members
 
      public double Add(MessageData data)
      {
         double sum = data.m_addend1 + data.m_addend2; 
         return sum;
      }
 
      #endregion
   }
}
 
 
Post Reply