geektutu/7days-golang · error

rpc server: service/method request ill-formed:

Error message

rpc server: service/method request ill-formed: 

What it means

Request-routing guard in findService: the serviceMethod string has no '.' separator, so it can never be a valid "ServiceName.MethodName" pair. It fires for malformed request headers sent by the client, e.g. calling a method without its service prefix.

Source

Thrown at gee-rpc/day3-service/server.go:110

	mtype        *methodType
	svc          *service
}

func (server *Server) readRequestHeader(cc codec.Codec) (*codec.Header, error) {
	var h codec.Header
	if err := cc.ReadHeader(&h); err != nil {
		if err != io.EOF && err != io.ErrUnexpectedEOF {
			log.Println("rpc server: read header error:", err)
		}
		return nil, err
	}
	return &h, nil
}

func (server *Server) findService(serviceMethod string) (svc *service, mtype *methodType, err error) {
	dot := strings.LastIndex(serviceMethod, ".")
	if dot < 0 {
		err = errors.New("rpc server: service/method request ill-formed: " + serviceMethod)
		return
	}
	serviceName, methodName := serviceMethod[:dot], serviceMethod[dot+1:]
	svci, ok := server.serviceMap.Load(serviceName)
	if !ok {
		err = errors.New("rpc server: can't find service " + serviceName)
		return
	}
	svc = svci.(*service)
	mtype = svc.method[methodName]
	if mtype == nil {
		err = errors.New("rpc server: can't find method " + methodName)
	}
	return
}

func (server *Server) readRequest(cc codec.Codec) (*request, error) {
	h, err := server.readRequestHeader(cc)

View on GitHub (pinned to cf36443821)

Solutions

  1. Call methods with the full "ServiceName.MethodName" string, e.g. "DemoService.Div".
  2. Check the client's serviceMethod argument for typos or missing dot separators.
  3. Have clients validate the method path before sending the request.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at gee-rpc/day3-service/server.go:110 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of geektutu/7days-golang@cf36443821 (2026-09-03). Data as JSON: /api/errors/39f096b342ecc416. Report an issue: GitHub.