2015-02-11 170 views
-1

你好,我正在寻找很长时间,但每个答案都没有解决我的问题。我有REST服务Wcf REST服务和客户

namespace WcfService1 
{ 

[ServiceContract] 
public interface IRestServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "images")] 
    List<MyImage> getImages();   
} 
[DataContract] 
public class MyImage 
{ 
    public MyImage(string name, Image img) 
    { 
     Name = name; 
     Img = img; 
    } 
    [DataMember] 
    public string Name 
    { 
     get; 
     set; 
    } 
    [DataMember] 
    public Image Img 
    { 
     get; 
     set; 
    } 
} 
} 

这里是实现:

namespace WcfService1 
{ 

public class RestServiceImpl : IRestServiceImpl 
{ 
    public List<MyImage> getImages() 
    { 
     List<MyImage> images = new List<MyImage>(); 
     string[] files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.jpg"); 

     foreach (string file in files) 
     { 
      Image im = Image.FromFile(file); 
      images.Add(new MyImage(file, im)); 
     } 
     return images; 
    } 
} 
} 

的Web.Config:

<?xml version="1.0"?> 
    <configuration> 
     <system.web> 
     <compilation debug="true" targetFramework="4.0" /> 
     </system.web> 
     <system.serviceModel> 
     <services> 
     <service name="WcfService1.RestServiceImpl" behaviorConfiguration="ServiceBehaviour"> 
     <endpoint address="" binding="webHttpBinding" contract="WcfService1.IRestServiceImpl" behaviorConfiguration="web">   
     </endpoint> 
     </service> 
     </services> 
     <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
     <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
     </behaviors> 
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
    </configuration> 

接下来,我创建客户端应用和增值业务参考和选择参考从本地主机上宣布

有代码的客户端

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     ServiceReference1.RestServiceImplClient service = new ServiceReference1.RestServiceImplClient(); 

     ServiceReference1.MyImage[] images = service.getImages(); 
     service.Close(); 
     List<ServiceReference1.MyImage> files = images.Select(im => new ServiceReference1.MyImage() { Img = im.Img, Name = im.Name }).ToList(); 

     listViewImages.ItemsSource = files; 

    } 
} 

在此行中:

ServiceReference1.MyImage[] images = service.getImages(); 

我有例外:

There was no endpoint listening at http://localhost:55008/RestServiceImpl.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

当我看着我的InnerException有:

The remote server returned an error: (404) Not Found.

这里是我的app.config文件对于客户:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<system.serviceModel> 
    <client> 
    <endpoint address="http://localhost:55008/RestServiceImpl.svc" binding="basicHttpBinding" contract="ServiceReference1.IRestServiceImpl"> 
    </endpoint> 
    </client> 
    <behaviors> 
    <serviceBehaviors> 
    <behavior name="ServiceBehaviour"> 
    <serviceMetadata httpGetEnabled="true"/> 
    <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
    </behaviors> 
</system.serviceModel> 
</configuration> 

我知道的话题是非常受欢迎的,但所有的答案couldn`t帮助我。

回答

0

从已发布的代码,服务web.config中没有与basicHttpBinding的端点。要通过代理使用服务,我相信你需要在你的问题中添加一个带有BasicHttpBinding的终端作为客户端web.config。它确实公开了一个REST端点。要调用REST服务,可以使用下面的url来调用。

http://localhost:55008/RestServiceImpl.svc/images 
0

尝试在客户端代码中添加REST服务的Web引用而不是服务引用。