2013-07-11 19 views
22

Khi tôi bấm chuột phải vào Eval.svc trong Visual Studio 2012 và tầm nhìn trong trình duyệt, tôi nhận được sau -WCF Service, loại được cung cấp như các giá trị thuộc tính dịch vụ ... không thể tìm được

Loại 'EvalServiceLibary. Đánh giá ', được cung cấp dưới dạng giá trị thuộc tính Dịch vụ trong chỉ thị ServiceHost hoặc được cung cấp trong phần tử cấu hình system.serviceModel/serviceHostingEnvironment/serviceActivations không thể tìm thấy.

Khi tôi chạy dịch vụ WCF từ máy khách thử nghiệm, tất cả đều hoạt động tốt.

dịch vụ

Eval:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 
public class EvalService : IEvalService 
{ 
    Dictionary<string, JobPhaseTimer> jobTimers = new Dictionary<string, JobPhaseTimer>(); 

    public void SubmitEntry(ENBO.Jobs.Job job, ENBO.Jobs.JobDetail jobDetail, ENBO.TimeLogs.TimeLog timeLog, ENBO.Users.User user, ENBO.Utilities.EntryType entryType, JobPhase jobPhase) 
    { 
     if (entryType == EntryType.Active) 
     { 
      JobPhaseTimer timer = new JobPhaseTimer(); 
      timer.UID = job.ID + "_" + jobPhase.ID; 
      timer.JobID = job.ID; 
      timer.JobDetailID = jobDetail.ID; 
      timer.PhaseID = jobPhase.ID; 
      timer.StartTime = DateTime.Now; 
      timer.Stopwatch.Start(); 
      jobTimers.Add(timer.UID, timer); 

      TimeLog log = new TimeLog(); 
      log.JobID = job.ID; 
      log.PhaseID = jobPhase.ID; 
      log.UserID = user.ID; 
      log.DateEntry = DateTime.Now; 
      log.EntryType = EntryType.Active; 

      if (log.AddNewTimeLog()) 
      { 
       //Do something 
      } 
     } 
     else if (entryType == EntryType.Paused) 
     { 
      JobPhaseTimer timer = jobTimers[job.ID + "_" + jobPhase.ID]; 
      timer.Stopwatch.Stop(); 

      TimeLog log = new TimeLog(); 
      log.JobID = job.ID; 
      log.PhaseID = jobPhase.ID; 
      log.UserID = user.ID; 
      log.DateEntry = DateTime.Now; 
      log.EntryType = EntryType.Paused; 

      if (log.AddNewTimeLog()) 
      { 
       //Do something 
      } 
     } 
    } 
} 

IEvalService.cs (Hợp đồng dịch vụ)

[ServiceContract] 
public interface IEvalService 
{ 
    [OperationContract] 
    void SubmitEntry(Job job, JobDetail jobDetail, TimeLog timeLog, User user, EntryType entryType, JobPhase jobPhase); 
} 

Eval.svc đánh dấu:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 

Web.config:

<?xml version="1.0"?> 
<configuration> 

    <appSettings> 
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="EvalServiceLibary.EvalService"> 
     <endpoint address="" behaviorConfiguration="" binding="webHttpBinding" 
     contract="EvalServiceLibary.IEvalService" /> 
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" 
     contract="EvalServiceLibary.IEvalService" /> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="EvalServiceSite.EvalAspNetAjaxBehavior"> 
      <enableWebScript /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <protocolMapping> 
     <add binding="basicHttpsBinding" scheme="https" /> 
    </protocolMapping>  
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true"/> 
    </system.webServer> 
</configuration> 

Bất kỳ ý tưởng nào khiến tôi gặp phải lỗi này? Tôi đã tìm kiếm trên Google và gặp một vài trang nhưng dường như không có gì hiệu quả.

Cảm ơn!

+0

là một dự án web? Web.config như thế nào? – Aliostad

+0

Có, một dự án web. Tôi đã thêm web.config vào câu hỏi. Chúc mừng – dynamicuser

Trả lời

8

Chỉ ra rằng Eval.svc.cs cần không gian tên của nó được thay đổi thành EvalServiceLibary, thay vì EvalServiceSite.

59

Thay đổi dòng sau trong file Eval.svc của bạn từ:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 

tới:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %> 
+0

Điều này sẽ có trong 'Danh sách lỗi dịch vụ WCF lạ' của tôi hoặc một cái gì đó. –

+6

Đã hoạt động! Chỉ cần thêm, nếu bạn không thể tìm thấy đánh dấu đã chỉ định - hãy nhấp chuột phải vào tệp .svc trong Solution Explorer và nhấp vào "Xem đánh dấu". Nếu không, nếu bạn mở nó, nó sẽ mở tập tin mã. –

+1

OMG! Tôi nhìn khắp mọi nơi cho điều này sau khi tôi thay đổi tên của dịch vụ trong một hướng dẫn từ service1 sang cái gì khác. Nhấp chuột phải vào tệp .svc để lưu lại số giờ kéo tóc của tôi !!! – MC9000

4

Tôi chỉ cần nhấn vấn đề này bản thân mình, và không là cái này cũng không bất kỳ câu trả lời nào khác trên mạng được giải quyết vấn đề của tôi. Đối với tôi, đó là một điều kỳ lạ khi thư mục ảo được tạo trên một nhánh khác trong một máy chủ điều khiển nguồn khác (về cơ bản, chúng tôi đã nâng cấp từ TFS 2010 lên 2013) và giải pháp bằng cách nào đó đã nhớ nó là ánh xạ.

Dù sao, tôi đã nhấp lại vào nút "Tạo thư mục ảo" trong thuộc tính Thuộc tính của dịch vụ. Nó đã cho tôi một thông điệp về việc được ánh xạ tới một thư mục khác và tôi muốn cập nhật nó. Tôi đã nhấp vào có và điều đó đã khắc phục được sự cố.

+0

Điều này làm việc trong tình huống của tôi. – SixOThree

22

Đảm bảo rằng tệp nhị phân nằm trong thư mục con "bin" của tệp ".svc"

+0

Chuyển (các) .dll vào thư mục bin đã thực hiện thủ thuật cho tôi. –

+0

Làm việc cho tôi cũng vậy, cảm ơn! – karfus

+1

tuyệt vời. Điều đó là vậy đó! tôi quên rằng tôi đã làm sạch giải pháp của mình. chỉ cần phải xây dựng. một lỗi mơ hồ như vậy – symbiont

0

Kiểm tra dự án kép .net phiên bản. Các dự án tham chiếu lẫn nhau với các phiên bản .net khác nhau gây ra sự cố.

0

Trong trường hợp của tôi, tôi đã thực hiện "Chuyển đổi sang ứng dụng" thành thư mục sai trên iis. Đơn đăng ký của tôi được đặt trong thư mục con của nơi cần có.

2

Tôi đã thay đổi đường dẫn đầu ra của dịch vụ. nó phải nằm trong thư mục bin của dự án dịch vụ. Khi tôi đặt đường dẫn đầu ra trở lại bin, nó hoạt động.

0

Tôi đã gặp lỗi này khi tôi có cấu hình xây dựng hiện tại trong Visual Studio được đặt thành một cái gì đó khác với Gỡ lỗi.

-1

Đây là một lỗi cũ, nhưng tôi gặp nó ngày hôm nay trên một dịch vụ web mà chưa kịp bị thay đổi kể từ khi được tạo ra thông qua "New \ Project .."

Đối với tôi, vấn đề này là do "IService.cs "tập tin chứa những điều sau đây:

<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1.svc" CodeBehind="Service1.svc.cs" %> 

Thông báo giá trị trong thuộc tính Service chứa" .svc "ở cuối.

Điều này không nên ở đó.

Xóa 4 ký tự đó đã giải quyết được vấn đề này.

<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1" CodeBehind="Service1.svc.cs" %> 

Lưu ý rằng bạn cần mở tệp này từ bên ngoài Visual Studio.

Visual Studio cho thấy một tập tin, Service1.cs trong Solution Explorer, nhưng điều đó chỉ cho phép bạn thay đổi Service1.svc.cs, không file Service1.svc.

+1

VS cho phép bạn chỉnh sửa tệp này bằng cách nhấp chuột phải và "Xem đánh dấu". –

0

Tôi cũng gặp vấn đề tương tự. Cố ý xây dựng đường dẫn đầu ra của tôi là ".. \ bin" và nó hoạt động cho tôi khi tôi thiết lập đường dẫn đầu ra xây dựng là "\ bin".

15

Đối mặt với vấn đề chính xác này. Sự cố được giải quyết khi tôi thay đổi thẻ Service = "Namespace.ServiceName" trong Đánh dấu (nhấp chuột phải xxxx.svc và chọn Xem đánh dấu trong studio trực quan) để khớp với không gian tên tôi đã sử dụng cho tệp xxxx.svc.cs của mình

+0

Đây là vấn đề chính xác của tôi. Vòng loại không gian tên phân biệt chữ hoa chữ thường. – miniscem

3

1, Khi bạn tạo một ứng dụng IIS thư mục chỉ/bin hoặc/App_Code nằm trong thư mục gốc của ứng dụng IIS. Chỉ cần nhớ đặt tất cả mã trong thư mục gốc/bin hoặc/App_code.

http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis.aspx

2, Hãy chắc chắn rằng tên dịch vụ và hợp đồng chứa tên đầy đủ (ví dụ namespace.ClassName), và tên dịch vụ và giao diện cũng giống như các thuộc tính tên của thẻ dịch vụ và hợp đồng điểm cuối trong web.config.

+0

điểm thứ hai đã giúp tôi, tên dịch vụ bao gồm tên không gian tên nhưng không phải tên lớp để hoàn thành tên dịch vụ bởi ** Namespace.ClassName ** –

1

Nhấp chuột phải vào tập tin .svc trong Solution Explorer và nhấp View Markup

<%@ ServiceHost Language="C#" Debug="true" 
    Service="MyService.**GetHistoryInfo**" 
    CodeBehind="GetHistoryInfo.svc.cs" %> 

Cập nhật các tài liệu tham khảo dịch vụ mà bạn đang đề cập đến.

Các vấn đề liên quan